我一直在使用一个基于Java的第三方REST Web服务,它返回一个xmlNodes数组。
这个xmlNode[]表示一个对象,我正在尝试找出将xmlNode[]反序列化成对象的最佳方法?是先构建一个xmlDocument再进行反序列化吗?
谢谢。
这个xmlNode[]表示一个对象,我正在尝试找出将xmlNode[]反序列化成对象的最佳方法?是先构建一个xmlDocument再进行反序列化吗?
谢谢。
XmlNode
转换为您的类。private static T ConvertNode<T>(XmlNode node) where T: class
{
MemoryStream stm = new MemoryStream();
StreamWriter stw = new StreamWriter(stm);
stw.Write(node.OuterXml);
stw.Flush();
stm.Position = 0;
XmlSerializer ser = new XmlSerializer(typeof(T));
T result = (ser.Deserialize(stm) as T);
return result;
}
您需要将XmlNode
的XML表示形式(属性.OuterXml
)写入流(这里是MemoryStream
),然后使用XmlSerializer
从该流反序列化对象。
您可以使用通用方法并调用
Customer myCustomer = ConvertNode<Customer>(xmlNode);
或者你甚至可以将该代码转换为XmlNode
类上的扩展方法,这样您就可以编写:
Customer myCustomer = xmlNode.ConvertNode<Customer>();
马克
也许回答有些晚了,但这将对其他人有所帮助:
这里是解决方案,您将能够从XML节点中进行反序列化
。
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
XmlNode xmlNode = xmlDoc.SelectSingleNode("//SystemInfo");
XmlSerializer serial = new XmlSerializer(typeof(SystemInfo));
using(XmlNodeReader reader = new XmlNodeReader(xmlNode)) {
SystemInfo syso =(SystemInfo)serial.Deserialize(reader);
}
首先将XML加载到XmlDocument对象
中,然后找到您想要反序列化的父节点,就像我想从整个XML文档中获取对象节点一样。
找到后,使用特定类类型创建一个XmlSerializer
对象。
现在只需将reader
(使用using
创建)传递给Deserialize方法,您将获得以类对象填充的对象,就像我用XML值填充了syso
对象一样。
愉快地编码 :)
using (XmlNodeReader reader = new XmlNodeReader(xmlNode))
块来处理它。 - Ian Goldby