2011-08-29 41 views
1

我有一個時髦的場景,感謝我們使用.NET 4和C#4,似乎在包裏。事實證明,解決方案更復雜,並且可能不存在一些完全自定義的解決方案。是否可以使用特定的xml名稱空間(xmlns)將動態對象圖序列化爲xml?

簡而言之,我需要序列化一個動態對象,它具有一組固定的必需屬性和一組可選屬性。根元素必須在xmlns屬性中包含一個自定義xml名稱空間,並且某些子對象可能需要使用不同的xml名稱空間。我們的第一種方法是從DynamicObject中派生出一個自定義類。這允許我們添加一個XmlRootAttribute並指定一個名稱空間。除了在動態屬性上定義自定義命名空間的複雜性外,即使這種簡單的方法似乎也不起作用。 XmlSerializer儘管傳遞了一個dynamic變量作爲序列化對象,但只是序列化硬編碼的屬性,並忽略該對象的任何動態方面。

我們一直在使用JsonFx 2.0,並決定嘗試一下。通過仔細改進我們的DynamicObject衍生產品,我們能夠讓JsonFx 2.0序列化所有必需的內容,但它拒絕序列化任何xmlns屬性。

是否有某種方法將部分動態的對象序列化爲xml幷包含特定的命名空間?或者,這僅僅是一個必須定義一個任意複雜的對象圖的情況,選擇適合特定需求的圖,如動態派生的運行時?

似乎.NET 4的xml序列化故事在序列化動態對象時相當鬆懈。

+0

您是否想出瞭解決此問題的不同解決方案?如果是這樣,如果你在這裏發佈它會很好。 :-) –

+0

你可以試試這個解決方案:http://stackoverflow.com/questions/18951521/web-api-dynamic-to-xml-serialization/19085236#19085236 –

回答

2

XmlSerializer會在執行任何反射魔術之前,先盯着你的IXmlSerializable實現(如果你實現它),它需要找到[XmlElement]及其瘋狂的兄弟姐妹。只需實現IXmlSerializableDynamicObject,你應該能夠動態地讀取和寫入任何你喜歡的XML。

+0

是的,謝謝你的提示。我希望避免必須執行任何手動XML序列化,因爲這可能會非常快速地變得非常複雜和非常混亂。 – jrista

相關問題