试着让我的思想围绕着谷歌Protobuf。 我在C#中找到了protobuf的一些实现,但它们似乎缺少一个特性:从一个用属性修饰的现有C#类自动生成。proto文件的能力。
我之所以想这样做,而不是从。proto文件中自动生成的C#类,是因为我已经在我的项目中定义了C#类,我不想仅仅为了满足Protobuf而复制它们。
有人遇到过这样的场景吗?
更新
仅仅修饰一个C#类而不使用一个。proto文件来使用Protobuf是可能的吗?
好消息; 您所描述的(具有现有的C#类)是ProtoBuf-Net的预期用例。 所有。proto的东西(“protogen”,VS插件等)都是事后添加的。 protobuf-net的核心并不了解它们,也不关心它们。
protocol buffers定义了在实现之间共享的DSL(。proto,正如您提到的),并且(有时)用于代码生成。 当我第一次编写protobuf-net时,代码生成方面并不是我最关心的问题--只是。NET开发人员(包括我自己)通常对“实现优先”而不是“契约优先”感到内疚。
因此,protobuf-net不需要。proto文件即可工作; 属性化类足以明确地序列化/反序列化。 只需使用serializer.serialize
,.merge
和.deserialize
(等等)。
这就是说; 它确实包括一些非常不成熟和实验性的支持:
string proto = Serializer.GetProto<YourType>();
这还远未完成,但可能适用于简单类型。 如果你有一些失败的具体案例,那么让我知道(添加评论或记录一个问题)。 但是; 大多数时候,对。proto感兴趣的人会先编写。proto,然后从那里开始工作。
工程主页上显示了工作装饰类型的示例; 使用WCF属性,xml属性还是protobuf-net属性完全由您决定(尽管后者提供了对某些特定序列化点的更多控制,如继承和数字布局)。
在此之前 <罢工> 双向飞碟 Marc跑到这里,得到了大量的ups,让我指出Protobuf.net。