是的,protobuf-net 无需 .proto 文件即可工作。事实上,对于 protobuf-net,核心早在 .proto 支持之前就已经编写好了。您所需要的只是允许它为您想要序列化的每个成员获取唯一编号的东西。在“v2”(未发布)中,您可以在外部执行此操作,但在可用的 dll 中,这意味着属性。这可以DataContractSerializer
是定制的 protobuf-net 属性,或者如果更方便,您可以使用(例如)这些属性:
[DataContract]
public class Foo {
[DataMember(Order=1)]
public int Abc {get;set;}
[DataMember(Order=2)]
public string Def {get;set;}
}
支持生成 .proto 文件 ( )Serializer.GetProto
-但是,有一些注意事项:
- protobuf-net 支持继承;Google protobuf 规范中没有继承的定义。如果您认为互操作是一个问题,最好避免继承(尽管有一种解释它的方法;probofuf-net 总是发出一个有效的 protobuf 流)
- 其他复杂类型可能需要解释;例如 while
float
和double
直接映射到 protobuf 类型(在每个实现中都可用),而and则不是这样;如果您认为互操作是一个问题,则可能值得从一开始就简化这一点 - 例如决定您要发送 a ,也许发送代表偏移量到一个时期的 a ?在任何实现中都易于解释。decimal
DateTime
DateTime
long