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

xar*_*xar 6 .net xml json xml-serialization

有没有可能的方法将动态创建的对象序列化为xml字符串?

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

我能够看一下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);
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

没有使用标准的内置序列化器,没有; XmlSerializer 要求公共类型(匿名类型不是),并且只适用于读写成员(匿名类型没有).DataContractSerializer想要属性(匿名类型没有).

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

public class MyDto {
    public string foo {get;set;}
}
...
var foobar = new MyDto { foo = "bar" };
Run Code Online (Sandbox Code Playgroud)

另一种方法是本质上写自己的XML序列化.那...听起来不是很有趣.