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

时间:2009-08-26 13:23:09

标签: c# .net serialization protocol-buffers protobuf-net

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

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

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


更新

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

2 个答案:

答案 0 :(得分:31)

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

协议缓冲区定义了一个在实现之间共享的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.