2012-08-10 158 views
6

是否有任何可能的方式將動態創建的對象序列化爲xml字符串?如何將匿名類型對象序列化爲XML?

var foobar = new { foo = "bar" }; 
string xml = ConvertToXMLString(foobar); 
//xml should be something like : 
//<foo>bar</foo> 

我能看看的XMLSerializer和DataContractSerializer的,但需要的XMLSerializer對象類型,而DataContractSerializer的要求上需要序列化屬性的屬性。

絕望之餘,我首先將對象轉換爲JSON,然後從JSON將其轉換爲XML。

var foobar = new { foo = "bar" }; 
JavaScriptSerializer js = new JavaScriptSerializer(); 
jsonString = js.Serialize(values); 
//Json.NET at http://json.codeplex.com/ 
XmlDocument doc = (XmlDocument)JsonConvert.DeserializeXmlNode(jsonString); 
+0

「'dynamic'」對象是不同的:'新{..}'結果以靜態類型表達。 – 2012-08-10 06:02:35

+1

謝謝你指出。我混淆了術語。 – xar 2012-08-10 06:06:11

+0

對hack的良好調用轉換爲JSON,然後XML =) – madannes 2017-10-23 15:04:27

回答

5

不使用標準內置串行器,不; XmlSerializer要求公共類型(其中匿名類型不是),只適用於讀寫成員(匿名類型沒有)。 DataContractSerializer想要屬性(其中匿名類型沒有)。

坦率地說,這裏最簡單和最可支持的「修正」是正式聲明一個匹配你所追求的POCO DTO,也就是說:在這裏不要使用匿名類型。例如:

public class MyDto { 
    public string foo {get;set;} 
} 
... 
var foobar = new MyDto { foo = "bar" }; 

另一種方法是基本上編寫自己的XML序列化。那......聽起來不像是有趣的。