当在protobuf.net中使用继承时,do标记必须在整个继承树中是唯一的
本文关键字:继承 唯一 net protobuf 当在 do | 更新日期: 2023-09-27 18:06:22
我很难找到一个明确的答案。我从文档的理解是,类中的ProtoInclude和ProtoMember标签需要要独树一帜,但不能横越整棵树。
意味着这应该是好的:
[ProtoContract]
[ProtoInclude(2, typeof(Employee))]
public class Person{
[ProtoMember(1)]
public string Name { get; set; }
}
[ProtoContract]
public class Employee : Person{
[ProtoMember(1)]
public string Department{ get; set; }
}
正确吗?如果是这样,当序列化的属性被覆盖时会发生什么?
标签必须在整个继承树中唯一吗?
不,他们没有。你的理解是正确的。Protobuf-net通过封装派生类型来实现继承,因此限制很简单,子类型的标记不得与本地类型中的任何其他标记冲突。所以:
// this contract is an INVALID example
[ProtoContract]
[ProtoInclude(1, typeof(Employee))]
public class Person{
[ProtoMember(1)]
public string Name { get; set; }
}
无效,因为子类型Employee
的标记与属性Name
冲突。
在该类型之外没有冲突。其他类型可以使用"sub-type 1",其他类型可以使用"property 1",等等