我一直在这里使用答案 binding xml elements to model in MVC4 将XML文件绑定到模型。
当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 :(得分: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
。
答案 1 :(得分: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);
}
答案 2 :(得分: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 );
}
答案 3 :(得分: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);
}