我们现在使用.net二进制序列化来序列化数据以保持不变。它完成了这项工作,但没有像它打算用于那个目的一样,因为改变数据并不是那么微不足道。
所以我开始研究protobuf,因为它是围绕这个目的设计的。
我正在研究protobuf-net如何使用它。以下是我还不知道的一些事情。如果你已经得到答案,它将节省我的一天。
答案 0 :(得分:4)
是的,protobuf-net不使用.proto文件。实际上,对于protobuf-net来说,核心是在.proto支持之前写的。您所需要的只是允许它为您要序列化的每个成员获取唯一编号。在“v2”(未发布)中,您可以在外部执行此操作,但在可用的dll中,这意味着属性。这个可以是定制的protobuf-net属性,或者你可以使用(例如)DataContractSerializer
属性,如果更方便的话:
[DataContract]
public class Foo {
[DataMember(Order=1)]
public int Abc {get;set;}
[DataMember(Order=2)]
public string Def {get;set;}
}
支持生成.proto文件(Serializer.GetProto
) - 但是,有一些警告:
float
和double
直接映射到protobuf类型(在每个实现中都可用)时,{em> not 是decimal
和DateTime
的真实;如果您认为互操作是一个问题,那么从一开始就可能值得简化 - 例如,决定您要发送DateTime
,或者将代表偏移的long
发送到一个纪元?在任何实施中都易于理解。