2011-10-10 33 views
2

我在.net http://code.google.com/p/protobuf-net/中使用協議緩衝區。將協議緩衝區文件序列化爲xml /文本格式

我安裝了visual studio支持版本,我可以在項目中編寫proto文件,並自動生成csharp類文件。

很多次我需要將文件轉儲爲xml(或其他文本格式(如果可用))文件。我發現有一個方法Serializer.Serialize()需要一個XmlWriter參數。我試圖使用它,但它抱怨我定義的protobuf類型必須可轉換爲system.Xml.Serialization.IXmlSerializable。

在我的情況下,我應該做的爲了我的類型可以轉換爲System.Xml.Serialization.IXmlSerializable?我不想直接更改cs文件,因爲它是在原始文件更改時即時生成的。

謝謝。

回答

2

Protobuf-net 不寫 xml;該API旨在允許您在xml流中將protobuf數據編寫爲不透明的BLOB(base-64)。然而,protobuf網通常很樂意允許與XmlSerializer並排使用 - 它尊重大部分相同的隱喻。很可能,只需使用new XmlSerializer(typeof(YourRootType))來序列化對象就可以正常工作。實際上,從.proto 的代碼生成的內部處理的一部分依賴於此二元性

如果你想在生成的代碼(即[XmlType(...)]等)明確 XML標記,只需使用p:xml命令行選項,該選項(如果您正在使用的IDE工具),也可以通過使用;xml實現在「自定義工具命名空間」(這真的不是很明顯,但它是少數地方,我發現在那裏將接受額外的數據之一):在「自定義輸入

enter image description here

基本上,任何事情工具名稱空間「假定(通過protobuf-net)是一個分號列表sta使用期望的命名空間,隨後是生成器的選項;因此;xml使用默認名稱空間,然後添加「xml」選項,與在命令行上執行p:xml相同。

+0

謝謝你的回答。是的,它對XmlSerializer非常有用。你能解釋一下如何在「自定義工具命名空間」中使用p:xml嗎? – Henry

+0

@亨利現在加入 –

+0

明白了。謝謝!! – Henry