试图让我的思绪围绕谷歌protobuf。我在C#中发现了一些protobuf的实现,但它们似乎缺少一个功能:能够从使用属性修饰的现有C#类自动生成.proto文件。
我想这样做而不是从.proto文件中自动生成的C#类的原因是因为我已经在我的项目中定义了C#类,我不想复制它们只是为了满足ProtoBuf
有没有人遇到过这种情况?
更新
这可以只装饰C#类而不使用.proto文件来使用protobuf吗?
答案 0 :(得分:31)
协议缓冲区定义了一个在实现之间共享的DSL(.proto,如你所提到的),并且(有时)用于代码生成。当我第一次编写protobuf-net时,代码生成方面并不是我最关心的问题 - 只是.NET开发人员通常对“先实现”而不是“合同优先”感到内疚(包括我自己)。
因此,protobuf-net 不需要.proto文件来工作;属性类足以明确地序列化/反序列化。只需使用Serializer.Serialize
,.Merge
和.Deserialize
(等)。
那说;它 包括一些非常欠发达和实验支持:
string proto = Serializer.GetProto<YourType>();
这远非完整,但可能适用于简单类型。如果您遇到某些特定情况,请告诉我(添加评论或记录问题)。然而;大多数时候,对.proto感兴趣的人会首先编写.proto 并从那里开始工作。
工作装饰类型的示例显示在project home page;您是否使用WCF属性,xml属性或protobuf-net属性完全取决于您(尽管后者提供了对某些特定序列化点的更多控制,例如继承和数字布局)。
答案 1 :(得分:4)
在 Skeet 之前,Marc在这里跑步并获得巨大的成功,让我指出protobuf.net.