gpt4 book ai didi

serialization - 如何将 C# 中现有的 POCO 类转换为 google Protobuf 标准 POCO

转载 作者:行者123 更新时间:2023-12-01 18:04:19 28 4
gpt4 key购买 nike

我有 POCO 类,我使用 NewtonSoft json 进行序列化。现在我想将其迁移到Google协议(protocol)buff。有什么方法可以迁移我的所有类(不是手动),以便我可以使用 google protocol buff 进行序列化和反序列化。

最佳答案

你只是想让它工作吗? 绝对最简单的方法是使用 protobuf-net 并添加 [ProtoContract(ImplicitFields = ImplicitFields.AllPublic)] 。它的作用是告诉 protobuf-net 组成字段编号,它通过获取所有公共(public)成员,按字母顺序对它们进行排序,然后向上计数来实现。然后你可以使用你的类型 ProtoBuf.Serializer它应该按照您期望的方式运行。

简单,但不是很健壮。如果您添加、删除或重命名成员,它们可能会变得不同步。这里的问题是 Protocol Buffer 格式不包括名称 - 只是字段编号,并且随着时间的推移保证数字要困难得多。如果您的类型可能会发生变化,您可能需要明确定义字段编号。例如:

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

[ProtoMember(2)]
public List<string> Names {get;} = new List<string>();
}

另一件需要注意的事情是非零默认值。默认情况下,protobuf-net 假设有关隐式默认值的某些事情。如果您经常使用非零默认值没有非常仔细地执行,protobuf-net 可能会误解您。如果您愿意,您可以全局关闭它:

RuntimeTypeModel.Default.UseImplicitZeroDefaults = false;

关于serialization - 如何将 C# 中现有的 POCO 类转换为 google Protobuf 标准 POCO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44561170/

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