是否可以使用协议缓冲区C#(ProtoBuf-net)序列化复杂对象

本文关键字:ProtoBuf-net 序列化 复杂 对象 可以使 协议 缓冲区 是否 | 更新日期: 2023-09-27 17:56:04

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

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

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

是否可以使用协议缓冲区C#(ProtoBuf-net)序列化复杂对象

是的; 这里有各种选择;

  • 首先,请注意,如果你添加成员,"隐式字段"是脆弱的,因为它必须做出比我想要的更多的猜测;只在稳定的合约中使用。
  • 您可以通过全局设置全局应用默认行为,但我倾向于建议不要这样做
  • protobuf-net v1 还可以与:
    • XmlType/XmlElement 属性对,只要 XmlElement 指定了 Order
    • 数据
    • 协定/数据成员属性对,只要数据成员指定了订单
    • 分部类;甚至对于属性,通过 ProtoPartMember 属性等
  • protobuf-net v2 可以在没有任何属性的情况下 100% 使用,方法是使用 TypeModel 在运行时描述感兴趣的类型;如果需要,这也可以将模型编译为专用的序列化 DLL(特别是用于依赖 AOT 的设备)
我可以

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

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