2009-11-21 32 views
1

我剛剛更新到R275版本,它似乎並沒有正確管理類DataContract更多 通過序列化這個非常簡單的類:DataContract序列與protobuf網R275

[DataContract] 
public class ProtoData 
{ 
    [DataMember(Order = 1)] 
    private long _id; 
    [DataMember(Order = 2)] 
    private string _firstName; 
    [DataMember(Order = 3)] 
    private string _lastName; 

    public long Id 
    { 
     get { return _id; } 
     set { _id = value; } 
    } 

    public string FirstName 
    { 
     get { return _firstName; } 
     set { _firstName = value; } 
    } 

    public string LastName 
    { 
     get { return _lastName; } 
     set { _lastName = value; } 
    } 

    public ProtoData(long id, string firstName, string lastName) 
    { 
     _id = id; 
     _firstName = firstName; 
     _lastName = lastName; 
    } 

    public ProtoData() 
    { 
    } 

我只得到數據合同類(和這樣的列表/陣列)可被處理(錯誤處理ProtoData)

+0

原始異常沒有找到合適的默認ProtoData編碼。 – 2009-11-21 10:50:17

回答

4

真的嗎?那是......奇怪的;我希望單元測試能夠發生這樣的突變。你確定你使用的是正確的版本嗎?有一個2.0版本(其中不支持包括[DataContract]支持,因爲這是在WCF,一個3.0擴展)和一個單獨的3.0版本。你想要3.0版本(NET30.zip)。

與R275/NET30成功測試:

static void Main() { 
    ProtoData pd = new ProtoData { 
     FirstName = "Marc", 
     LastName = "Gravell", 
     Id = 23354 
    }, clone; 
    using (MemoryStream ms = new MemoryStream()) { 
     Serializer.Serialize(ms, pd); 
     Console.WriteLine(ms.Length); 
     ms.Position = 0; 
     clone = Serializer.Deserialize<ProtoData>(ms);    
    } 
    Console.WriteLine(clone.FirstName); 
    Console.WriteLine(clone.LastName); 
    Console.WriteLine(clone.Id); 
} 

隨着輸出:

19 
Marc 
Gravell 
23354 
+2

Ups,謝謝你的回答,並很抱歉浪費你的時間。一切都恢復正常。我使用的是2.0版本:( – 2009-11-23 09:42:06

0

嘗試以下方法:

  • 移除所有私有成員
  • 使用公共屬性

    public string LastName;

  • 馬克所有的公共屬性與[數據成員]

+0

我不行,我卡在VS2005 – 2009-11-21 12:23:25

+0

@dan,編輯到VS2005代碼 – 2009-11-21 13:42:37

+0

我試了一下。結果相同。這個代碼在262版本中工作得很好。現在所有使用DataContract的單元測試都失敗了。 – 2009-11-21 15:24:30