【问题标题】:XML Parse to listXML 解析到列表
【发布时间】:2014-08-07 19:24:39
【问题描述】:
[XmlRoot("Employees")]
public class Employee
{
    [XmlElement("EmpId")]
    public int Id { get; set; }

    [XmlElement("Name")]
    public string Name { get; set; }
}

简单的方法,返回列表:

    public static List<Employee> SampleData()
    {
        return new List<Employee>()
        {
            new Employee(){
                Id   = 1,
                Name = "pierwszy"
            },
            new Employee(){
                Id   = 2,
                Name = "drugi"
            },
            new Employee(){
                Id   = 3,
                Name = "trzeci"
            }
        };
    }

Program.cs:

   var list = Employee.SampleData();
   XmlSerializer ser = new XmlSerializer(typeof(List<Employee>));
   TextWriter writer = new StreamWriter("nowi.xml");
   ser.Serialize(writer, list);

我有文件结果:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfEmployee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Employee>
    <EmpId>1</EmpId>
    <Name>pierwszy</Name>
  </Employee>
  <Employee>
    <EmpId>2</EmpId>
    <Name>drugi</Name>
  </Employee>
  <Employee>
    <EmpId>3</EmpId>
    <Name>trzeci</Name>
  </Employee>
</ArrayOfEmployee>

但我希望根元素具有名称:"Employees",而不是 "ArrayOfEmployee" 我该怎么做呢?

我想做,因为我有文件,结构如下:

<Employees>
    <Employee>
    ...
    </Employee>
    <Employee>
    ...
    </Employee>
</Employees>

【问题讨论】:

标签: c# xml parsing


【解决方案1】:

如下更改即可

XmlSerializer ser = new XmlSerializer(typeof(List<Employee>), 
                                      new XmlRootAttribute("Employees"));

就是这样。但是要在您的问题中获得一个干净的 xml(没有 xml 声明,没有 xsi 或 xsd 命名空间等),您应该使用一些技巧

XmlSerializer ser = new XmlSerializer(typeof(List<Employee>), 
                                      new XmlRootAttribute("Employees"));

TextWriter writer = new StreamWriter(filename);
var xmlWriter = XmlWriter.Create(writer, new XmlWriterSettings() { OmitXmlDeclaration = true, Indent = true });

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");

ser.Serialize(xmlWriter, list, ns);

【讨论】:

    【解决方案2】:

    你可以通过XmlRootAttribute来设置元素名称:

    var root = new XmlRootAttribute("Employees");
    
    XmlSerializer ser = new XmlSerializer(typeof(List<Employee>), root);
    TextWriter writer = new StreamWriter("nowi.xml");
    ser.Serialize(writer, list);
    

    来自http://msdn.microsoft.com/en-us/library/f1wczcys%28v=vs.110%29.aspx

    ... root 参数允许您替换默认对象的 通过指定 XmlRootAttribute 获取信息;该对象允许您 设置不同的命名空间、元素名称等。

    【讨论】:

      【解决方案3】:

      您可以使用属性标记您的属性,使用 XmlArray 和 XmlArrayItem 属性

      【讨论】:

        猜你喜欢
        • 2017-06-20
        • 2018-08-12
        • 2014-12-25
        • 1970-01-01
        • 2011-02-17
        • 1970-01-01
        • 2017-05-06
        • 2015-04-13
        相关资源
        最近更新 更多