是否可以使用Protocol Buffers C#(ProtoBuf-net)序列化复杂对象

时间:2011-05-10 15:26:20

标签: c# protocol-buffers llblgenpro

是否可以在不使用Protocontract和proto文件的情况下使用Protocol Buffers C#(ProtoBuf-net)序列化复杂对象?

[ProtoBuf.ProtoContract(ImplicitFields = ProtoBuf.ImplicitFields.AllPublic)]

我曾尝试使用ProtoContract,但即使这样我也无法序列化对象(它是一个LLBLGen ORM对象)。

1 个答案:

答案 0 :(得分:5)

是;这里有各种选择;

  • 首先,请注意,如果添加成员,“隐含字段”会很脆弱,因为它必须做出比我想要的更多的猜测;只与稳定合同一起使用
  • 您可以通过GlobalSettings全局应用默认行为 ,但我倾向于反对它
  • protobuf-net v1也适用于:
    • XmlType / XmlElement属性对,只要XmlElement指定订单
    • 即可
    • DataContract / DataMember属性对,只要DataMember指定订单
    • 部分班级;甚至对于属性,通过ProtoPartialMember属性等等
  • protobuf-net v2可以100%使用,没有任何类型的属性,通过使用TypeModel在运行时描述有趣的类型 ;如果需要,这也可以将模型编译为专用的序列化dll(特别是与AOT相关的设备一起使用)

我可以提供更多建议,但提出了许多选择;告诉我哪个是最合适的,我可以添加更多细节。

Re .proto文件;那些(并且一直是)完全是可选的与protobuf-net,因为我认识到很多情况下代码优先的方法(或对现有模型的序列化的改进)是有用的。如果你选择使用.proto,那么三个代码生成器。