我有一个基类和子类,每个都使用Protobuf-net定义为可序列化的:
[DataContract]
public class BaseClass
{
[DataMember(Order = 1)]
public string PropertyA { get; set; }
// ...
}
[DataContract]
public class SubClass : BaseClass
{
[DataMember(Order = 101)]
public string PropertyB { get; set; }
// ...
}
其他地方:
ProtoBuf.Meta.RuntimeTypeModel.Default[typeof(BaseClass)]
.AddSubType(100, typeof(SubClass));
有必要将子类的一个属性移动到基类:
[DataContract]
public class BaseClass
{
[DataMember(Order = 1)]
public string PropertyA { get; set; }
// [DataMember(Order = ?)]
public string PropertyB { get; set; }
// ...
}
[DataContract]
public class SubClass : BaseClass
{
// ...
}
进行此更改后,是否可以配置类型模型,以便将PropertyB
中的BaseClass
序列化为与以前相同的位置,以保持与旧客户端的兼容性?
(理想的解决方案将使用System.Runtime.Serialization
属性并避免重复序列化输出中的值 - 在new
中使用PropertyB
实现SubClass
base.PropertyB
{1}} get
和set
其值。)