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上进行谷歌搜索将提供大量的教程,您可以使用这些教程找到适合您的教程。