如何使用protobuf-net

时间:2017-05-13 09:47:04

标签: c# .net protocol-buffers protobuf-net

我有一个使用protobuf-net序列化的数据合约。

[ProtoContract]    
public class Cat
{
    [ProtoMember(1)]
    public Friend[] Friends { get; set; }
}

上次决定重构它们并将一些属性移动到基类,例如:

[ProtoContract]    
public class Cat : Animal
{
    // other props
}

public abstract class Animal
{
    [ProtoMember(1)]
    public Friend[] Friends { get; set; }
}

在此之后我发现财产朋友没有从之前的seralized数据反序列化。如何在不破坏变更的情况下执行这样的重构?

1 个答案:

答案 0 :(得分:0)

我不是在PC上验证这一点,但您可以尝试添加:

[ProtoPartialMember(1, "Friends")]

Cat的类定义。如果这不起作用,接下来要尝试的是:

    RuntimeTypeModel.Default[typeof(Cat)]
.Add(1, " Friends ");

(序列化前)

如果这些都不起作用,请告诉我,当我不在飞机上时,我会找到更好的选择:)

最糟糕的情况是重新宣布该成员:

[ProtoMember(1)]
public new Friend[] Friends {
    get { return base.Friends;}
    set { base.Friends = value; }
}