代码之家  ›  专栏  ›  技术社区  ›  dan ionescu

使用Protobuf NET R275进行数据合同序列化

  •  1
  • dan ionescu  · 技术社区  · 16 年前

    我刚更新到r275版本,它似乎不再正确管理DataContract类了。 通过序列化这个非常简单的类:

    [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)

    2 回复  |  直到 16 年前
        1
  •  4
  •   Marc Gravell    16 年前

    真的?那是…很奇怪;我本来希望单元测试能够支持这样一个突破性的变化。您确定使用的是正确的版本吗?有一个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
  •  0
  •   Shiraz Bhaiji    16 年前

    尝试以下操作:

    • 删除所有私人成员
    • 使用公共属性

      公共字符串姓氏;

    • 用[datamember]标记所有公共属性