我有POCO课程,我使用NewtonSoft json进行分类。现在我想将其迁移到Google协议buff。有没有办法我可以迁移我的所有类(不是手动),以便我可以使用谷歌协议buff进行序列化和解除分类。
答案 0 :(得分:0)
你只是想让它起作用吗? 绝对最简单的方法是使用protobuf-net并添加[ProtoContract(ImplicitFields = ImplicitFields.AllPublic)]
。这样做是告诉protobuf-net 组成字段编号,它通过采取所有公共成员,按字母顺序排序,并向上计数来完成。然后,您可以将您的类型与ProtoBuf.Serializer
一起使用,它应该按照您期望的方式运行。
这是简单,但它不是很健壮。如果您添加,删除或重命名成员,它们都会失去同步。这里的问题是协议缓冲区格式不包括名称 - 只是字段编号,并且随着时间的推移很难保证数字 。如果您的类型可能会更改,您可能希望明确定义字段编号。例如:
[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;