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

Serialization 如何将C#中现有的POCO类转换为google Protobuf标准POCO,serialization,protocol-buffers,protobuf-net,Serialization,Protocol Buffers,Protobuf Net,我有POCO类,我使用NewtonSoft json进行序列化。现在我想把它迁移到GoogleProtocolBuff。是否有任何方法可以迁移我的所有类(不是手动),以便使用GoogleProtocolBuff进行序列化和反序列化 你只是想让它工作吗?要做到这一点,最简单的方法是使用protobuf net并添加[ProtoContract(ImplicitFields=ImplicitFields.AllPublic)]。它所做的是告诉protobuf net组成字段号,它将所有公共成员按字母

我有POCO类,我使用NewtonSoft json进行序列化。现在我想把它迁移到GoogleProtocolBuff。是否有任何方法可以迁移我的所有类(不是手动),以便使用GoogleProtocolBuff进行序列化和反序列化

你只是想让它工作吗?要做到这一点,最简单的方法是使用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>();
}
RuntimeTypeModel.Default.UseImplicitZeroDefaults = false;