我是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]装饰要序列化的每个属性。我更喜欢第二种方法。

10-08 16:51