protobuf-net多个衍生合约

时间:2014-06-02 17:51:18

标签: c# protobuf-net protocol-buffers

我有以下基类:

[ProtoContract]
public class Packet
{
    [ProtoMember(1)]
    public int Id { get; set; }
}

此课程将由10多个其他课程推导出来。我的问题是我应该如何分配ProtoInclude属性?

这是一个好的解决方案吗?

[ProtoContract]
[ProtoInclude(20, typeof(NotifyClientBalance))]
[ProtoInclude(21, typeof(IsAlive))]
[ProtoInclude(22, typeof(TransactionConfirmation))]
...
public class Packet
{
    [ProtoMember(1)]
    public int Id { get; set; }
}

有更好的选择吗?我应该如何为ProtoInclude分配标签?对我来说一切都不清楚,并且没有关于此事的好文件。

由于

P.S。

ProtoInclude可以跨不同平台移植吗?我特别感兴趣的是Python。

再次感谢:)

1 个答案:

答案 0 :(得分:2)

在protobuf-net中使用,这种方法很好。数字很​​好而且很低,这使它保持高效。

继承不是protobuf规范的一部分,因此不能在平台之间移植它 - 至少不是继承。在获取数据方面它是可移植的。它映射到类似:

message Packet {
    optional int id = 1;
    optional NotifyClientBalance balance = 20;
    // ...
}
message NotifyClientBalance {...}
//...

或者只使用Serializer.GetProto<T>()将架构导出为.proto