如何将匿名类型的对象序列化为XML?

时间:2012-08-10 05:57:05

标签: .net xml json xml-serialization

有没有办法将动态创建的对象序列化为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);

2 个答案:

答案 0 :(得分:5)

不使用标准内置序列化程序,不; XmlSerializer 要求公共类型(匿名类型不是),仅适用于读写成员(匿名类型没有)。 DataContractSerializer需要属性(匿名类型没有)。

坦率地说,这里最简单,最可支持的“修复”是正式声明一个匹配你所追求的POCO DTO,也就是说:不要在这里使用匿名类型。例如:

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

替代方案是基本上编写自己的xml序列化程序。那...听起来不是很有趣。

答案 1 :(得分:1)

可以使用反射完成,查看此主题中的第二个和第三个答案以获取代码示例:Can I serialize Anonymous Types as xml?

MartinHN also blogged about this

相关问题