4

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

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

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

4

1 回答 1

5

是的; 这里有多种选择;

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

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

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

于 2011-05-10T18:34:02.090 回答