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

kho*_*vat 4 c# llblgenpro protocol-buffers

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

[ProtoBuf.ProtoContract(ImplicitFields = ProtoBuf.ImplicitFields.AllPublic)]
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ell 5

是; 这里有各种选择;

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

我可以提供更多建议,但有很多选择; 告诉我哪个是最合适的,我可以添加更多细节.

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