如何在protobuf-net中得到工作?

时间:2014-10-06 10:40:00

标签: protobuf-net derived-types

就像我在C#中所做的那样:

class DerivedClass : BaseClass {}

有没有办法用原型文件中的消息重新创建这种行为? 这样DerivedClass的类型为BaseClass,并且可以继承其属性。

我尝试extend我的基本信息,但这会产生不同的结果。

1 个答案:

答案 0 :(得分:1)

如果我们假设这是:

[ProtoContract]
[ProtoInclude(7, typeof(DerivedClass))]
public class BaseClass {}

[ProtoContract]
public class DerivedClass : BaseClass {}

然后我们可以使用:

string proto = Serializer.GetProto<BaseClass>();

了解protobuf-net如何解释它:

message BaseClass {
   // the following represent sub-types; at most 1 should have a value
   optional DerivedClass DerivedClass = 7;
}
message DerivedClass {
}

这实际上可以很好地映射到新的oneof - 简单地说,GetProto尚未更新以使用新语法(但它不会影响输出)。但以下也是等同的:

message BaseClass {
    oneof subtypes {
        // the following represent sub-types; at most 1 should have a value
        DerivedClass DerivedClass = 7;
        AnotherDerivedClass AnotherDerivedClass = 8;
        AndOneMoreForLuck AndOneMoreForLuck = 9;
    }
}
message DerivedClass {
}
message AnotherDerivedClass {
}
message AndOneMoreForLuck {
}