2011-03-25 77 views
2

我正在用WCF中的一個簡單對象裝飾DataContractDataMember屬性。我有一個List<T>屬性,並故意將其設計爲在第一次訪問時實例化後備字段(如果爲null)。下面是該課程的縮寫版本。WCF,生成的DataMember List <>代理類屬性爲空?

[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; 
     } 
    } 
} 

的問題是,在生成的客戶端/代理類,我不能沒有,因爲它是空(這是上面的if邏輯應該處理)手動實例它的第一次訪問屬性。

的代碼下面的回報,第二行空:

//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所以也許我失去了一些東西?我認爲代理類生成會兌現DataMember屬性中的if邏輯?

我只是使用內置VS 2010 WCF工具來生成代理類等,並沒有進入自定義序列化。

任何有識之士將不勝感激!

回答

5

生成的代碼不會複製您的實現,只是您的結構,這就是爲什麼您必須在客戶端初始化您的屬性。

如果您希望在客戶端和服務器上具有相同的實現,則需要查看共享協定。

這基本上就是您在單獨程序集中定義合同的位置,然後在客戶端和服務器端使用相同的合同。

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

+0

謝謝。我想我必須脫離我對此的期望。我曾經玩過雙方共享的組件,但沒有多少運氣。肯定會對你擁有的任何資源感興趣。 +1 – 2011-03-25 14:37:45

+0

+1斑點。 – Aliostad 2011-03-25 14:38:39

+0

谷歌搜索「wcf共享合同」帶來了大量的東西 – BenCr 2011-03-25 14:40:49

相關問題