如果我有一个
形式的xml<Details>
<Detail>
<Name1>Value1</Name1>
<Name2>Value2</Name2>
</Detail>
...
</Details>
我在我的c#代码中为Detail定义了一个类,并为Name1,Name2等提供了setter / getter 是否有api直接读取xml并创建Detail对象。
答案 0 :(得分:4)
查看XmlSerializer - 这会从对象的形状创建/解析xml(因此您的属性名称需要与xml中的属性/元素名称匹配)。
如果您需要更多控制权,则需要使用较新的Linq to XML API
XSD.exe 可以基于XSD或XML文件为您生成一个类文件,但如果您将它作为一个XML文件,那么您需要一个非常有代表性的文件(带有多个元素,只要有多个元素),否则你需要调整一些东西。这是一个很好的开始......
答案 1 :(得分:2)
Linq to XML非常适合这一点。
var details = from detail in document.Descendants("Detail")
select new Detail { Name1 = detail.Element("Name1").Value, Name2 = detail.Element("Name2").Value };
(假设您已经定义了一个名为Detail的类型,您可以很好地省略Detail
并获得匿名类型。)
此代码将生成IEnumarable<Detail>
(或anon。类型),您可以为对象迭代。
答案 2 :(得分:1)
您也可以使用DataContractSerializer
。
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx
答案 3 :(得分:0)
XSD.exe
从XML文件创建C#类 - 有关详细信息,请参阅this post。使用XmlSerializer
反序列化类:
XmlSerializer serializer = new XmlSerializer(typeof(Details));
using (var fs = new FileStream(filename, FileMode.Open))
{
XmlReader reader = XmlReader.Create(fs);
var result = (Details)serializer.Deserialize(reader);
}
答案 4 :(得分:0)
使用此代码:
DetailList dl;
XmlSerializer xmls = new XmlSerializer(typeof(List<DetailList>))
using (Stream fs = new FileStream(@"C:\path\to\file.xml", FileMode.Open))
dl = (DetailList)xmls.Deserialize(fs);
确保使用正确的属性填充了类。使用
using System.Xml.Serialization;
// ...
[Serializable]
public class Detail
{
[XmlElement]
public string Name1 { get; set; }
[XmlElement]
public string Name2 { get; set; }
// REQUIRED: a parameterless constructor for XmlSerializer (can be private)
private Detail(){}
public Detail(string name1, string name2)
{
Name1 = name1;
Name2 = name2;
}
}
[Serializable, XmlRoot("Details")]
public class DetailList : List<Detail>
{
}