xmlNode到对象

我一直在使用第三方基于Java的REST Web服务,它返回一个xmlNodes数组。

xmlNode []会出现一个对象,我正在尝试找出对象中反序列化xmlNode []的最佳方法吗? 是首先建立一个xmlDocument和Deserialize?

谢谢

如果你安装了WCF Rest Starter Kit预览版,那就是一个巧妙的技巧:

  • 打开Visual Studio
  • 选择XML节点内容(构成其中一个节点的XML)并将其复制到剪贴板
  • 从Visual Studio的“编辑”菜单中选择“将XML粘贴为类型”

这会将剪贴板上的XML粘贴到项目中,作为能够反序列化该精确XML的C#类。 太漂亮了!

请参阅以下博客文章:

  • Aaron Skonnard:WCF REST入门套件:将XML粘贴为类型
  • REST入门工具包中的“将XML粘贴为类型”

这应该可以节省很多打字,让生活更轻松!

更新:
好的,您已经从您获得的XML生成了类。 现在您需要将XmlNode转换为您的类。

你必须做这样的事情:

 private static T ConvertNode(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从该流序列化对象。

您可以使用generics方法并调用它

  Customer myCustomer = ConvertNode(xmlNode); 

或者您甚至可以将该代码转换为XmlNode类的扩展方法,以便您可以编写:

  Customer myCustomer = xmlNode.ConvertNode(); 

也许在这里回答太晚了,但它会帮助其他人:

以下是您可以从XML节点Deserialize的解决方案。

  XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml); XmlNode xmlNode = xmlDoc.SelectSingleNode("//SystemInfo"); XmlSerializer serial = new XmlSerializer(typeof(SystemInfo)); SystemInfo syso =(SystemInfo)serial.Deserialize(new XmlNodeReader(xmlNode)); 

首先将XML加载到XmlDocument Object ,然后找到您希望反序列化的父节点,就像我想从所有XML文档中获取SystemInfo对象节点一样。

一旦发现创建一个具有您希望的特定类类型的XmlSerializer对象。

现在只需将new XmlNodeReader(xmlNode)传递给Deserialize方法,您将获得填充在类对象中的对象,就像我使用XML值填充syso对象一样。

快乐编码:)

最简单的方法是使用.NET中内置的System.Xml.Serialization.XmlSerializer类。 在XmlSerializer上进行谷歌搜索将提供大量的教程,您可以使用这些教程找到适合您的教程。