39

试图让我的想法围绕 google protobuf。我在 C# 中找到了一些 protobuf 的实现,但它们似乎缺少一个功能:从现有的 C# 类中自动生成 .proto 文件的能力,该类装饰有属性。

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

有没有人遇到过这样的场景?


更新

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

4

2 回答 2

44

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

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

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

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

string proto = Serializer.GetProto<YourType>();

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

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

于 2009-08-26T13:50:22.883 回答
11

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

于 2009-08-26T13:25:03.820 回答