假设我们有以下三个类:
[ProtoContract]
[ProtoInclude(10, typeof(FirstType))]
[ProtoInclude(20, typeof(SecondType))]
public class Base
{
[ProtoMember(1)]
public int ClassId {get;set;}
}
public class FirstClass : Base
{
...
}
public class SecondClass : Base
{
...
}
类Id(在基类中)与匹配子类的类型之间存在关系。例如,
var obj1 = new FirstClass() {ClassId = 1}
var obj2 = new SecondClass() {ClassId = 2}
现在让我们假设我们已经序列化了这些对象。问题是:通过查看ClassId字段,是否有任何基于类Id值反序列化序列化protobuf的好方法?即,如果serailized protobuf中classId的值为1,则使用FirstClass对剩余的流字节进行反序列化。
谢谢!
答案 0 :(得分:0)
如果您正在使用ProtoInclude,那么protobuf-net已经在使用哪个子类:这是ProtoInclude的整个 point 。在某些情况下,不可能使用继承,在这种情况下,有方法可以通过ProtoReader读取原型流,或者使用仅读取该属性的第二个模型,然后重置源并再次读取。这里有一个例子:https://stackoverflow.com/a/14572685/23354