繁体   English   中英

如何使用protobuf-net将成员安全地转移到基层

[英]How to move members to base class safely with 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; }
}

此后,我发现属性Friends没有从以前的序列化数据中反序列化。 我如何在不中断更改的情况下执行这样的重构?

我不在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; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM