gpt4 book ai didi

c# - 如何将 Protobuf-net 用于复杂对象?

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:45 24 4
gpt4 key购买 nike

我们正在使用 wpf,并且想要序列化一个复杂的对象——一个 View 模型。

使用二进制格式化程序,我可以只添加一个属性 [Serializable],它会自动递归地为整个类工作。

我们在 protobuf 中有类似的东西吗?

另外,文档在哪里?

我了解了 protoinclude 和 protomembers,但这些都是可能会发生变化的复杂对象。

我们想使用 protobuf,因为它紧凑、快速且便携。但我不排除其他选择,只要它能或多或少地达到相同的目标,并且易于使用。请回答或建议选项。谢谢

最佳答案

BinaryFormatter 通过在输出中包含字段名称来管理这一点,这既冗长又脆弱(例如,它无法承受从字段+属性到自动实现的属性的更改) .

如果您想在 protobuf-net 中做类似的事情,您可以使用“ImplicitFields”,但是请注意,这会按字母顺序为每个成员分配一个整数键,因此仅适用于您的模型完全固定为契约(Contract),不会添加/重命名成员因为这会破坏契约(Contract)(意思是:您无法正确反序列化现有数据)。例如:

[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)]
public class Foo {...} // all public fields and properties are serialized,
// similar to XmlSerializer

[ProtoContract(ImplicitFields = ImplicitFields.AllFields)]
public class Bar {...} // all fields (not properties; public or private)
// are serialized, similar to BinaryFormatter

如果您的契约(Contract)不是完全固定的,最好为每个序列化成员明确分配一个 key ,这可以在 a great many ways 中完成。 .最简单的是:

[ProtoContract]
public class Foo {
[ProtoMember(1)]
public int A {get;set;}

...
}

关于c# - 如何将 Protobuf-net 用于复杂对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8208324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com