我是WCF和实体框架的新手。
我有一个包含DatabaseEntities.edmx
(实体框架objectContext
)的类库“ A”。
该库在内部使用实体对象公开了一个包含函数FunctionB
的类“ B”。
我已将此库“ A”引用带入WCF Web服务,并在IService.cs
内-我将其编码为:
[OperationContract]
void FunctionB_Proxy();
在没有定义任何
DataContract
的情况下,我进入了Service1.cs
并实现了此功能如下:
public void FunctionB_Proxy()
{
ClassB x=new ClassB();//Class of ClassLibrary
x.FunctionB();
}
这很好。
但是我的问题是:在WCF中
DataContract
是可选的吗?提前致谢..
最佳答案
从.NET 3.5 SP1开始-是,不再需要[DataContract]
。
如果您省略它,则该类将像XML序列化器一样进行序列化:默认情况下,将对类上的所有公共属性进行序列化。
但是:如果您开始在类中使用[DataContract]
或在其中一个属性上使用[DataMember]
,则必须使用[DataMember]
装饰要序列化的所有属性。
因此,要么是:完全不使用那些属性(使用XML序列化程序所使用的默认行为),要么将其具体化,并用[DataContract]
装饰类,并使用[DataMember]
装饰要序列化的每个属性。我更喜欢第二种方法。