2010-12-14 54 views
0

我是新來的XML,所以請不要介意它太瑣碎問題轉換XML對象的層次結構對象並添加到列表

假設我有這樣一個XML文件下面

<Person>  
     <Name>John-Jaime-Winston Junior</Name>  
    </Person> 
    <Person>  
     <Name>Steve</Name> 
    </person 

現在我將擁有一個人物對象,我可以知道如何讀取xml並覆蓋到一組對象。

最後我想要一個像所有人物一樣的列表。

我無法獲得啓動如何做到這一點,因爲我是新來的xml的

class person { 

string _name 

public string Name 
     { 
      get { return _name} 
      set { _name= value; } 
     } 

} 

在此先感謝

+0

事實是否真的XML你」重新使用? – ChaosPandion 2010-12-14 19:47:25

+0

@chaos pandioin,是的我使用XML,我只是一個示例代碼,因爲我不能發佈我的整個XML,它幾乎相同的概念 – kobe 2010-12-14 19:51:25

+0

僅供參考:該示例是無效的XML,因爲XML需要有一個單一的根節點。建議將其改爲像ChaosPandion的示例。 – StriplingWarrior 2010-12-14 20:10:49

回答

1

我想你想要像XmlSerializer,你可以序列化和反序列化這個對象。只是應界定公共性質

[Serializable()] 
public class person 
{ 

     string _name 

     public string Name 
     { 
      get { return _name} 
      set { _name= value; } 
     } 

} 

,並使用它:

 XmlSerializer serializer = new XmlSerializer(typeof(Person)); 
     StreamWriter sw = new StreamWriter("c:\\out.xml"); 
     serializer.Serialize(sw,new Person{Name = "Test"}); 
     sw.Close(); 


     StreamReader sr = new StreamReader("c:\\out.xml"); 
     var outVal = serializer.Deserialize(sr) as Person; 

但對於解析正常,您就可以使用的XDocument或XPath XML,...

+0

這就是我想要的,所以我可以寫一個方法,可以通過任何類型的對象 – kobe 2010-12-14 21:04:21

+0

我正在尋找類似於上面的東西和一個普通的方法,需要人並自動轉換爲對象,我以某種方式實現它,如果你有更好的代碼請發佈。 – kobe 2010-12-15 05:26:56

+0

@gov,您應該閱讀XmlSerializre鏈接我爲您留下的序列化對象是一種正常的序列化方式,您也可以使用soap formatter,binaryformatter和DataContractSerializer來做它,例如在遠程處理或WCF對象應該序列化發送和在接收器中,他們應該反序列化,這可以通過這種方式實現,說出你想要什麼,如果我知道我會幫你:) – 2010-12-15 09:03:59

3

鑑於.NET 3.5和System.Xml.Linq的,這是很容易的。

var q = from e in XElement.Parse(xml).Elements() 
     select new Person() { 
      Name = e.Element("Name").Value 
     }; 

var p = q.ToList(); 

您需要提供有效的XML喜歡什麼如下:

<People> 
    <Person> 
     <Name>Jim</Name> 
    </Person> 
    <Person> 
     <Name>Bill</Name> 
    </Person> 
</People>