我一直在使用基於第三方Java的REST webservice,它返回一個xmlNodes數組。xmlNode對象
xmlNode [] respresent一個對象,我試圖找出反序列化對象中的xmlNode []的最佳方法?是它首先建立一個xmlDocument和Deserialize?
感謝
我一直在使用基於第三方Java的REST webservice,它返回一個xmlNodes數組。xmlNode對象
xmlNode [] respresent一個對象,我試圖找出反序列化對象中的xmlNode []的最佳方法?是它首先建立一個xmlDocument和Deserialize?
感謝
如果您安裝了WCF休息初學者工具包預覽,有一個絕招:
這將粘貼您的XML這是在剪貼板到您的項目作爲一個C#類,它是能夠反序列化確切的XML。相當漂亮!
看到這些博客文章吧:
這應該爲你節省大量的輸入,使生活變得更加簡單!
更新:
好的,你已經有了你從你得到的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>();
馬克
要做到這一點是使用內置的System.Xml.Serialization.XmlSerializer類.NET最簡單的方法。在XmlSerializer上的谷歌搜索將提供大量的教程,你可以用它來找到適合你的教程。
顯而易見且無用。當然,我需要XMLSerializer,但我有一個XML節點,而不是一個字符串或一個流。幸運的是,谷歌搜索提供了這個問題的其他有用的答案 – edc65 2016-02-11 11:28:28
可能這是爲時已晚,但它會幫助其他人:
以下是您將能夠從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文檔的父節點。
一旦你發現創建一個XmlSerializer
對象與特定的類類型,你會希望。
現在只需通過new XmlNodeReader(xmlNode)
到反序列化方法,你將得到填充在一個類對象中的對象,就像我填充了XML值syso
對象。
快樂編碼:)
嗨,我已經從XSD的對象,所以我真的不想做這一步。我想知道什麼是從xmlNodes [](序列化對象)最好的方法。 – 76mel 2009-10-14 08:06:57