protobuf网。反序列化基于

时间:2013-02-14 21:19:44

标签: serialization protobuf-net

假设我们有以下三个类:

[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对剩余的流字节进行反序列化。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您正在使用ProtoInclude,那么protobuf-net已经在使用哪个子类:这是ProtoInclude的整个 point 。在某些情况下,不可能使用继承,在这种情况下,有方法可以通过ProtoReader读取原型流,或者使用仅读取该属性的第二个模型,然后重置源并再次读取。这里有一个例子:https://stackoverflow.com/a/14572685/23354