KP.*_*KP. 2 c# asp.net wcf properties wcf-client
我正在使用DataContract和DataMember属性装饰WCF中的一个简单对象.我有一个List<T>属性,并故意设计它在第一次访问时实例化支持字段(如果为null).该类的缩写版本如下.
[DataContract]
public class FieldSetData
{
private List<FormFieldData> _formFields;
[DataMember]
public List<FormFieldData> FormFields
{
get
{
if (this._formFields == null)
{
this._formFields = new List<FormFieldData>();
}
return this._formFields;
}
set
{
this._formFields = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,在生成的客户端/代理类上,我无法在第一次手动实例化时访问该属性,因为它是null(这是if上面的逻辑应该处理的).
下面的第二行代码返回null:
//proxy class version
FieldSetData data = new FieldSetData();
data.FormFields.Add(new FormFieldData()); //FormFields property is null
Run Code Online (Sandbox Code Playgroud)
我必须这样做:
//instantiate the List<T> property
FieldSetData data = new FieldSetData { FormFields = new List<FormFieldData>() };
data.FormFields.Add(new FormFieldData());
Run Code Online (Sandbox Code Playgroud)
我对WCF很新,所以也许我在这里遗漏了一些东西?我认为代理类生成会尊重属性中的if逻辑DataMember吗?
我只是使用内置的VS 2010 WCF工具来生成代理类等,并且还没有进入自定义序列化.
任何见解将不胜感激!
生成的代码不会复制您的实现,只是您的结构,这就是您必须在客户端初始化您的属性的原因.
如果您希望在客户端和服务器上具有相同的实现,则需要查看共享合同.
它基本上是在单独的程序集中定义合同然后在客户端和服务器端使用相同的合同.
http://msdn.microsoft.com/en-us/library/aa480190.aspx