xml转换为Object c#

时间:2010-04-19 20:51:59

标签: c# xml

如果我有一个

形式的xml
<Details>
<Detail>
<Name1>Value1</Name1>
<Name2>Value2</Name2>
</Detail>
...
</Details>

我在我的c#代码中为Detail定义了一个类,并为Name1,Name2等提供了setter / getter 是否有api直接读取xml并创建Detail对象。

5 个答案:

答案 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)

答案 3 :(得分:0)

  1. 您需要使用XSD.exe从XML文件创建C#类 - 有关详细信息,请参阅this post
  2. 使用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>
{

}