WCF,生成的DataMember列表<>代理类属性是null?

时间:2011-03-25 14:32:17

标签: c# asp.net wcf properties wcf-client

我正在使用DataContractDataMember属性修饰的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;
        }
    }
}

问题是,在生成的客户端/代理类上,我无法在第一次手动实例化时无法访问该属性,因为它是null(这是上面if逻辑应该处理的内容)。

下面的第二行代码返回null:

//proxy class version
FieldSetData data = new FieldSetData();
data.FormFields.Add(new FormFieldData());  //FormFields property is null

我必须这样做:

//instantiate the List<T> property
FieldSetData data = new FieldSetData { FormFields = new List<FormFieldData>() };
data.FormFields.Add(new FormFieldData());

我对WCF很新,所以也许我在这里错过了一些东西?我认为代理类生成会尊重if属性中的DataMember逻辑?

我只是使用内置的VS 2010 WCF工具来生成代理类等,并且还没有进入自定义序列化。

任何见解都将不胜感激!

1 个答案:

答案 0 :(得分:5)

生成的代码不会复制您的实现,只是您的结构,这就是您必须在客户端初始化您的属性的原因。

如果您希望在客户端和服务器上具有相同的实现,则需要查看共享合同。

它基本上是在单独的程序集中定义合同,然后在客户端和服务器端使用相同的合同。

http://msdn.microsoft.com/en-us/library/aa480190.aspx