如何从使用属性修饰的C#类生成.proto文件?

试图让我的思绪围绕谷歌protobuf。 我在C#中发现了一些protobuf的实现,但它们似乎缺少一个function:能够从使用属性修饰的现有C#类自动生成.proto文件。

我想这样做而不是从.proto文件中自动生成的C#类的原因是因为我已经在我的项目中定义了C#类,我不想复制它们只是为了满足ProtoBuf。

有没有人遇到过这种情况?


更新

这可能只是装饰一个C#类而不是使用.proto文件来使用protobuf吗?

好消息; 您所描述的(具有现有的C#类)是protobuf-net的预期用例。 所有.proto的东西(“protogen”,VS插件等)都是作为事后添加的 。 protobuf-net的核心不了解它们或关心它们。

协议缓冲区定义了在实现之间共享的DSL(.proto,如你所提到的),并且(有时)用于代码生成。 当我第一次编写protobuf-net时,代码生成方面并不是我最关心的问题 – 只是.NET开发人员通常对“先实现”而不是“合同优先”感到内疚(包括我自己)。

因此,protobuf-net 不需要.proto文件来工作; 属性类足以明确地序列化/反序列化。 只需使用Serializer.Serialize.Merge.Deserialize (etc)。

那说; 它确实包括一些非常欠发达和实验性的支持:

 string proto = Serializer.GetProto(); 

这远非完整,但可能适用于简单类型。 如果您遇到某些特定情况,请告诉我(添加评论或记录问题)。 然而; 大多数时候,对.proto感兴趣的人会首先编写.proto并从那里开始工作。

工作装饰类型的示例显示在项目主页上 ; 您是否使用WCF属性,xml属性或protobuf-net属性完全取决于您(尽管后者提供了对某些特定序列化点的更多控制,例如inheritance和数字布局)。

Skeet Marc在这里跑步并获得巨大成功之前,让我指出protobuf.net。