我一直在使用一个基于java的第三方REST webservice,它返回一个xmlNodes数组。
xmlNode[]重新呈现一个对象,而我正在尝试找出反序列化对象中的xmlNode[]的最好方法?是先构建xmlDocument,然后再反序列化吗?
谢谢
发布于 2009-10-14 07:15:12
如果你已经安装了WCF Rest Starter Kit预览版,这里有一个巧妙的技巧:
这会将剪贴板上的XML作为能够反序列化该XML的C#类粘贴到您的项目中。非常漂亮!
看看这些关于它的博客文章:
这应该会为你节省大量的打字时间,让你的生活变得更容易!
更新:
好了,您已经从您得到的XML生成了类。现在,您需要将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>();Marc
发布于 2016-09-27 15:10:04
也许在这里回答这个问题太晚了,但它会对其他人有所帮助:
这是您将能够从XML节点执行Deserialize的解决方案。
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对象一样。
快乐编码:)
发布于 2009-10-14 01:58:12
最简单的方法是在.NET中使用内置的System.Xml.Serialization.XmlSerializer类,在XmlSerializer上进行谷歌搜索会提供大量的教程,你可以用它们来找到适合你的教程。
https://stackoverflow.com/questions/1563473
复制相似问题