如何从XML字符串反序列化对象?

时间:2011-10-10 11:23:30

标签: c# .net xml xml-serialization xml-deserialization

我正在尝试使用xmlSerializer.Deserialize()从其XML字符串反序列化对象,但返回的对象始终为空(不为null,但所有属性都为null或0)。我无法弄清楚我做错了什么,但我没有错误或例外。

string xml = "***my xml is here***";

XmlSerializer ser = new XmlSerializer(typeof(Order));
StringReader stringReader = new StringReader(xml);
XmlTextReader xmlReader = new XmlTextReader(stringReader);
Order order = (Order)ser.Deserialize(xmlReader);
xmlReader.Close();
stringReader.Close();

Order.cs的源代码是使用xsd.exe工具从XSD生成的。

order.cs的来源:http://www.nickgilbert.com/etc/1/Order.txt

示例订单XML:http://www.nickgilbert.com/etc/1/example-order.xml

2 个答案:

答案 0 :(得分:2)

您的示例XML文件(example-order.xml)使用名称空间http://tempuri.org/OrderSchema.xsd,但XSD(order.cs)生成的代码定义了名称空间http://x-rm.com/wrightcottrell/cataloguecd/中的所有元素。

您需要这些命名空间才能匹配,以便序列化正常工作。

答案 1 :(得分:1)

你得到一个对象的所有的事实告诉我该对象是公共的并且有一个公共无参数构造函数(否则会抛出异常)。所以,它最有可能失败了:

  • 反序列化成员必须是包含公开get和公开set的公共媒体资源,或公共(非只读)字段
  • 默认情况下,成员名称必须与xml 元素名称完全匹配,与父元素在同一xml命名空间中;可以通过属性(更改名称,使用属性,名称空间等)获得更精细的控制。