2013-11-27 25 views
1

我一直在使用這裏的答案 binding xml elements to model in MVC4 將XML文件綁定到模型。如何將XML文件綁定到列表<MyClass>?

當XML文件有一個元素時,這可以正常工作。當有很多元素時,我需要處理這個案例。我希望所有這些元素都進入List。

下面是一個例子文件:

<root> 
<item> 
<firstname>Tom</firstname> 
</lastname>Jones</lastname> 
<item> 
<item> 
<firstname>Jane</firstname> 
</lastname>Doe</lastname> 
</item> 
</root> 

MyXMLElements類的樣子:

[Serializable] 
[XmlRoot("item")] 
public class MyXMLElements 
{ 
    public string first name {get;set;} 
    public string lastname {get;set;} 
} 

我如何創建一個List<MyXMLElements>

+0

請包括試圖做你正在努力實現的代碼(即使它肯定不會編譯以及...)。這不是我所知道的BCL課程中所建立的任何行爲,所以希望你已經找到了其他可以幫助的東西。 –

回答

1

我認爲最簡單的方法就是使用XmlSerializer:

XmlSerializer serializer = new XmlSerializer(typeof(List<MyClass>)); 

using(FileStream stream = File.OpenWrite("filename")) 
{ 
    List<MyClass> list = new List<MyClass>(); 
    serializer.Serialize(stream, list); 
} 

using(FileStream stream = File.OpenRead("filename")) 
{ 
    List<MyClass> dezerializedList = (List<MyClass>)serializer.Deserialize(stream); 
} 
1

可以實現這種方式(我從文件中讀取XML,但是你可以從其他來源獲得它):

XDocument xDoc = XDocument.Load(@"C:\new.xml"); 
List<MyXMLElements> list = (from xEle in xDoc.Descendants("item") 
    select new MyXMLElements() { firstname = xEle.Element("firstname").Value, lastname = xEle.Element("lastname").Value }).ToList(); 

你不會在這種情況下,需要XmlRoot

0
XElement xelement = XElement.Load("..\\..\\XML.xml"); 
IEnumerable<XElement> employees = xelement.Elements(); 
Console.WriteLine("List of all Employee Names :"); 
foreach (var employee in employees) 
{ 
    Console.WriteLine(employee.Element("firstname").Value + employee.Element("lastname").Value); 
} 
0

一種解決方案如下:

類應該是這樣的:

[Serializable] 
[XmlType(TypeName = "item")] 
public class MyXMLElements 
{ 
    public string firstname {get;set;} 
    public string lastname {get;set;} 
} 

的反序列化代碼如下:

using (var rdr = System.Xml.XmlReader.Create(@"input.xml")) 
      { 
       var root=new System.Xml.Serialization.XmlRootAttribute("root"); 
       var ser = new System.Xml.Serialization.XmlSerializer(typeof(List<MyXMLElements>),root); 
       var list=(List<MyXMLElements>)ser.Deserialize(rdr); 
      } 
相關問題