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

发布于 2024-11-05 21:20:01 字数 256 浏览 0 评论 0原文

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

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

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

Is it possible to serialize complex object with Protocol Buffers C# (ProtoBuf-net) without using Protocontract and proto files ?

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

I have tried to use the ProtoContract but even then I can't serialize object (It is a LLBLGen ORM object).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

陈年往事 2024-11-12 21:20:01

是的;这里有多种选择;

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

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

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

Yes; there are various options here;

  • firstly, note that "implicit fields" is brittle if you add members, since it has to make more guesses than I would like; only use that with stable contracts
  • you can apply a default behaviour globally via GlobalSettings, but I tend to advise against it
  • protobuf-net v1 can also work with:
    • XmlType/XmlElement attribute pairs, as long as the XmlElement specifies an Order
    • DataContract/DataMember attribute pairs, as long as the DataMember specifies an Order
    • partial classes; even for properties, via ProtoPartialMember attribute(s), etc
  • protobuf-net v2 can be used 100% without attributes of any kind, by using a TypeModel to describe the interesting types at runtime; this can also compile the model to a dedicated serialization dll if you need (in particular for use with AOT-dependent devices)

I can advise more, but there are a number of options presented; tell me which is/are most appropriate and I can add more detail.

Re .proto files; those are (and have always been) entirely optional with protobuf-net, as I recognise that there are a lot of cases where a code-first approach (or retrofit of serialization to an existing model) is useful. Three is a code-generator if you choose to use .proto, of course.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文