2014-06-13 13 views
0

我正在評估Protobuf-net加速WCF項目,到目前爲止它看起來很有希望,但我在客戶端出現空列表(和字典)出現問題。集合不會連載protobuf網?

編輯 這個問題竟然是錯的問題是與空集沒有什麼做的內容。我正在更新它,所以任何人都會絆倒它可能會得到一些幫助。 編輯

這是(簡化)代碼

[ProtoContract] 
    public class TestObject 
    { 
     [ProtoMember(1)] 
     public List<int> Values { get; set; } 
    } 

    public Test() 
    { 

     TestObject bob = new TestObject() { Values = new List<int>() }; 
     using (MemoryStream stream = new MemoryStream()) 
     { 
      Serializer.Serialize<TestObject>(stream, bob); 

      stream.Seek(0, SeekOrigin.Begin); 

      TestObject copy = Serializer.Deserialize<TestObject>(stream); 

      // Fail! 
      Debug.Assert(copy.Values != null); 
     } 
    } 

當我看在副本中的值是空不空List對象。

任何想法,我可能做錯了什麼?我使用protobuf網全2.0.0.668

謝謝, 馬克

+0

我將不得不在晚些時候看看;目前的工作 –

+0

非常感謝,實際上struct結構可能是一個紅鯡魚,另一個不工作的集合是類對象的字典。我只是在尋找一種模式。 – MarkDaniel

+0

我發現了這個問題。這與結構和類沒有關係。如果集合爲空,那麼在反序列化的對象上會得到空值,而不是初始化的空集合。這甚至會發生在一個非常簡單的測試裝置上。 – MarkDaniel

回答

0

事實證明,這是protobuf的行爲,因爲基礎標準有一個空列表和一個空表沒有區別。

查看項目網站上的問題58131

對於任何從DataContract特別是使用WCF進行遷移的人來說,這將是一個驚喜。

可能的解決方法包括初始化內聯或在構造函數中,或者將您的代碼更改爲接受null或之後對其進行修補。

[ProtoAfterDeserialization] 
    public void Fix() 
    { 
     Values = Values ?? new List<int>(0); 
    }