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

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

dynamic”对象是不同的:new {..}会产生一个静态类型的表达式。 - user166390
1
谢谢您指出这一点。我对术语混淆了。 - xar
转换为 JSON,然后 XML 的黑客之举不错 =) - madannes
2个回答

5
不使用内置的标准序列化器,因为XmlSerializer需要公共类型(而匿名类型不是),并且仅适用于可读写成员(而匿名类型没有)。DataContractSerializer需要属性(而匿名类型没有)。
坦率地说,在此处最简单和最可支持的“修复”方法是正式声明与所需内容匹配的POCO DTO,即:不要在此处使用匿名类型。例如:
public class MyDto {
    public string foo {get;set;}
}
...
var foobar = new MyDto { foo = "bar" };

另一种选择就是基本上写你自己的xml序列化器。这...听起来不太有趣。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接