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);
4

2 回答 2

5

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

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

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

替代方案基本上是编写您自己的 xml 序列化程序。那……听起来不好玩。

于 2012-08-10T06:31:34.200 回答
1

可以使用反射来完成,请查看此线程中的第二个和第三个答案以获取代码示例:我可以将匿名类型序列化为 xml 吗?

MartinHN 也写了关于这个的博客

于 2012-08-10T07:51:08.030 回答