76m*_*mel 10 c# serialization xmlnode
我一直在使用第三方基于Java的REST Web服务,它返回一个xmlNodes数组.
xmlNode []重新呈现一个对象,我试图找出在对象中反序列化xmlNode []的最佳方法?是首先建立一个xmlDocument和Deserialize?
谢谢
mar*_*c_s 24
如果你安装了WCF Rest Starter Kit预览版,那就有一个巧妙的方法:
这会将剪贴板上的XML粘贴到项目中,作为能够反序列化该精确XML的C#类.太漂亮了!
请参阅以下博客文章:
这应该可以为您节省大量的打字工作,让生活更轻松!
更新:
好的,您已经从您获得的XML生成了类.现在您需要将a转换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;
}
Run Code Online (Sandbox Code Playgroud)
您需要将流的XML表示(属性.OuterXml
)写入XmlNode
此处(此处为a MemoryStream
),然后使用XmlSerializer
序列化该流中的对象.
您可以使用泛型方法并调用它
Customer myCustomer = ConvertNode<Customer>(xmlNode);
Run Code Online (Sandbox Code Playgroud)
或者您甚至可以将该代码转换为类的扩展方法,XmlNode
以便您可以编写:
Customer myCustomer = xmlNode.ConvertNode<Customer>();
Run Code Online (Sandbox Code Playgroud)
渣
也许这已经来不及回答了,但它会帮助其他人:
以下是您可以Deserialize
从XML节点获得的解决方案.
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));
Run Code Online (Sandbox Code Playgroud)
首先加载XML XmlDocument Object
,然后找到你希望反序列化的父节点,就像我想从所有XML文档中获取SystemInfo对象节点一样.
一旦你发现创建一个XmlSerializer
具有你想要的特定类类型的对象.
现在只需传递new XmlNodeReader(xmlNode)
给Deserialize方法,您将获得填充在类对象中的对象,就像我syso
使用XML值填充对象一样.
快乐编码:)
归档时间: |
|
查看次数: |
31088 次 |
最近记录: |