我是否需要在WCF DataContract中公开构造函数,以使其在客户端上的对象实例化期间工作?

我在WCF服务中有一个类,我们称之为A。 A是数据协定,其中包含另一个自定义对象B的集合作为其DataMembers之一。 为了避免客户端的Null引用问题,我在构造函数中实例化BList ,如下所示:

[DataContract] public class A { [DataMember] public String name { get; set; } [DataMember] public List BList {get; set; } public A() { BList = new List(); } } 

我的问题是在客户端上,在客户端上创建A的对象后,此实例化不会发生并且BList显示为null。 我猜测构造函数没有出现在客户端上。 那么,我是否需要使构造函数成为一个明确的操作契约? 如果是这样会使客户看到他们不应该看到的内部事物,对吧? 如何确保此实例化在客户端上发生?

谢谢,对不起,如果这看起来像一个愚蠢的问题。

您需要使用[OnDeserializing]或[OnDeserialized]属性来执行DataContract类型的初始化。 请参阅http://msdn.microsoft.com/en-us/library/ms733734.aspx

我不确定是否有办法这样做但是通过从服务获取新实例列表应该初始化,我建议以下

  • 编写一个Web方法,返回类的新实例,您可以将其用作以下内容,我确信您的列表已初始化

要创建实例:

 A a = new ServiceClient.CreateAInstance(); 

在服务中编写方法,

 [OperationContract] public A CreateAInstance() { return new A(); }