protobuf-net:类型发生变化时的向后兼容性?

时间:2013-08-07 11:44:47

标签: c# versioning protobuf-net

有一种方法可以在成员类型发生变化时提供向后兼容性吗?例如,Person类包含一个整数的版本1,但是在字符串的版本2中。我知道这违反了合同,但这个例子在现实生活软件开发中并不常见。

提前致谢。

// Version 1
[ProtoContract]
class Person 
{
    [ProtoMember(1)]
    public int ID { get; set; }
}

// Version 2
[ProtoContract]
class Person 
{
    [ProtoMember(1)]
    public string ID { get; set; }
}

1 个答案:

答案 0 :(得分:2)

垫片属性可能是你最好的选择:

// Version 2
[ProtoContract]
class Person 
{
    [ProtoMember(1)]
    private int? ID_v1 {
        get { return null; } // means it won't be serialized
        set { if(value != null) ID = value.ToString(); }
    }

    [ProtoMember(2)]
    public string ID { get; set; }
}