首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象的xmlNode

对象的xmlNode
EN

Stack Overflow用户
提问于 2009-10-13 23:15:55
回答 3查看 40.3K关注 0票数 15

我一直在使用一个基于java的第三方REST webservice,它返回一个xmlNodes数组。

xmlNode[]重新呈现一个对象,而我正在尝试找出反序列化对象中的xmlNode[]的最好方法?是先构建xmlDocument,然后再反序列化吗?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-14 07:15:12

如果你已经安装了WCF Rest Starter Kit预览版,这里有一个巧妙的技巧:

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

这会将剪贴板上的XML作为能够反序列化该XML的C#类粘贴到您的项目中。非常漂亮!

看看这些关于它的博客文章:

  • Aaron Skonnard: WCF REST Starter Kit: Paste XML as Types
  • "Paste XML as Types" in REST Starter Kit

这应该会为你节省大量的打字时间,让你的生活变得更容易!

更新:

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

你必须这样做:

代码语言:javascript
复制
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从该流序列化回对象。

您可以使用泛型方法并调用

代码语言:javascript
复制
 Customer myCustomer = ConvertNode<Customer>(xmlNode);

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

代码语言:javascript
复制
 Customer myCustomer = xmlNode.ConvertNode<Customer>();

Marc

票数 29
EN

Stack Overflow用户

发布于 2016-09-27 15:10:04

也许在这里回答这个问题太晚了,但它会对其他人有所帮助:

这是您将能够从XML节点执行Deserialize的解决方案。

代码语言:javascript
复制
 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 Object,然后找到您希望反序列化的父节点,就像我希望从所有XML文档中获取SystemInfo对象节点一样。

找到后,使用您希望的特定类类型创建一个XmlSerializer对象。

现在只需将reader (用using创建)传递给反序列化方法,您将获得类对象中填充的对象,就像我用XML值填充syso对象一样。

快乐编码:)

票数 13
EN

Stack Overflow用户

发布于 2009-10-14 01:58:12

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1563473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档