2009-10-13 27 views
8

我一直在使用基於第三方Java的REST webservice,它返回一個xmlNodes數組。xmlNode對象

xmlNode [] respresent一個對象,我試圖找出反序列化對象中的xmlNode []的最佳方法?是它首先建立一個xmlDocument和Deserialize?

感謝

回答

22

如果您安裝了WCF休息初學者工具包預覽,有一個絕招:

  • 打開Visual Studio,
  • 選擇XML節點的內容(即讓你的節點之一的XML)和複製它從Visual Studio中的「編輯」菜單中的剪貼板
  • ,選擇「粘貼XML作爲類型」

這將粘貼您的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>(); 

馬克

+0

嗨,我已經從XSD的對象,所以我真的不想做這一步。我想知道什麼是從xmlNodes [](序列化對象)最好的方法。 – 76mel 2009-10-14 08:06:57

-1

要做到這一點是使用內置的System.Xml.Serialization.XmlSerializer類.NET最簡單的方法。在XmlSerializer上的谷歌搜索將提供大量的教程,你可以用它來找到適合你的教程。

+1

顯而易見且無用。當然,我需要XMLSerializer,但我有一個XML節點,而不是一個字符串或一個流。幸運的是,谷歌搜索提供了這個問題的其他有用的答案 – edc65 2016-02-11 11:28:28

4

可能這是爲時已晚,但它會幫助其他人:

以下是您將能夠從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對象。

快樂編碼:)