繁体   English   中英

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

[英]How can I deserialize an object from an XML string?

我试图使用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

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

您需要将这些名称空间匹配起来,才能使序列化正常工作。

你得到一个对象返回所有的事实告诉我,对象是公众,具有公共参数的构造函数(否则一个异常会被抛出)。 因此,最有可能失败的原因之一是:

  • 反序列化成员必须是具有public get和public set公共属性,或者是public(非只读)字段
  • 默认情况下,成员名称必须与xml 元素名称完全匹配,并且与父元素位于相同的xml-namespace中; 可以通过属性(更改名称,使用属性,名称空间等)获得更精细的控制

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM