将协议缓冲区文件序列化为xml / text格式

时间:2011-10-10 18:29:40

标签: .net protocol-buffers protobuf-net

我在.net http://code.google.com/p/protobuf-net/中使用协议缓冲区。

我安装了visual studio支持版本,我可以在项目中编写proto文件,它会自动生成csharp类文件。

很多时候我需要将文件转储成xml(或其他文本格式,如果可用)文件。我发现有一个方法Serializer.Serialize(),它接受一个XmlWriter参数。我试图使用它,但它抱怨我定义的protobuf类型必须可以转换为system.Xml.Serialization.IXmlSerializable。

在我的情况下,为了我的类型我应该做什么可以转换为System.Xml.Serialization.IXmlSerializable?我不想直接更改cs文件,因为它是在原始文件更改时动态生成的。

感谢。

1 个答案:

答案 0 :(得分:2)

Protobuf-net 不写 xml;该API旨在允许您在xml流中将protobuf数据写为不透明的BLOB(base-64)。然而,protobuf-net通常很乐意允许与XmlSerializer并排使用 - 它尊重大多数相同的隐喻。最有可能的是,只需使用new XmlSerializer(typeof(YourRootType))序列化您的对象就可以了。事实上,.proto 代码生成的部分内部处理依赖于这种二元性。

如果您希望在生成的代码中使用显式 xml标记(例如[XmlType(...)]等),只需使用p:xml命令行选项(如果您是使用IDE工具也可以通过在“自定义工具命名空间”中使用;xml来实现(这实际上并不明显,但它是我发现接受额外数据的少数几个地方之一): / p>

enter image description here

基本上,在“自定义工具命名空间”中输入的任何内容(由protobuf-net)假定为以所需命名空间开头的分号列表,后跟生成器的选项;因此;xml 使用默认命名空间,然后添加“xml”选项,与在命令行上执行p:xml相同。