C# XML序列化示例,第一步

C# XML序列化示例,第一步,c#,xml,serialization,C#,Xml,Serialization,我有以下练习要做 我将获得以下xml文件 <?xml version="1.0" encoding="UTF-8"?> <Mitarbeiterstatistik xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Mitarbeiter> <Vorname>Horst</Vorna

我有以下练习要做

我将获得以下xml文件

<?xml version="1.0" encoding="UTF-8"?>
<Mitarbeiterstatistik xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Mitarbeiter>
    <Vorname>Horst</Vorname>
    <Nachname>Schneider</Nachname>
    <Id>1</Id>
  </Mitarbeiter>
  <Mitarbeiter>
    <Vorname>Tanja</Vorname>
    <Nachname>Lindner</Nachname>
    <Id>2</Id>
  </Mitarbeiter>
</Mitarbeiterstatistik>
然后我创建了一个类Mitarbeiterstatistik,其中包含Mitarbeiter对象的列表

[XmlRoot("Mitarbeiterstatistik")]
public class Mitarbeiterstatistik
{
  private List<Mitarbeiter> list = new List<Mitarbeiter>();

  [XmlArray("List")]
  public List<Mitarbeiter> List
  {
    get { return list; }
    set { list = value; }
  }
}
现在我得到了以下结果

<?xml version="1.0" encoding="UTF-8"?>
<Mitarbeiterstatistik xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  **<List>**
    <Mitarbeiter>
      <Vorname>Horst</Vorname>
      <Nachname>Schneider</Nachname>
      <Id>1</Id>
    </Mitarbeiter>
    <Mitarbeiter>
      <Vorname>Tanja</Vorname>
      <Nachname>Schneider</Nachname>
      <Id>2</Id>
    </Mitarbeiter>
  **</List>**
</Mitarbeiterstatistik>

****
地垒
施耐德
1.
坦贾
施耐德
2.
****
不,我的Xml文件中有一个元素“列表…”(见下表)

我能做些什么来解决我的问题

是否只能定义一个Mitarbeiter类而不能定义Mitarbeiterstatistik类

也许如下

  List<Mitarbeiter> list = new List<Mitarbeiter>();

  Mitarbeiter ma1 = new Mitarbeiter("Horst", "Schneider", 1);
  Mitarbeiter ma2 = new Mitarbeiter("Tanja", "Lindner", 2);

  list.Add(ma1);
  list.Add(ma2);

  XmlSerializer serializer = new XmlSerializer(typeof(List<Mitarbeiter>), new XmlRootAttribute("Mitarbeiterstatistik"));

  XmlWriter writer = XmlWriter.Create(@"D:\test.xml");

  serializer.Serialize(writer, list);

  writer.Close();
List List=新列表();
米塔比特ma1=新米塔比特(“霍斯特”,“施耐德”,1);
Mitarbeiter ma2=新的Mitarbeiter(“Tanja”,“Lindner”,2);
列表。添加(ma1);
列表。添加(ma2);
XmlSerializer serializer=新的XmlSerializer(typeof(List),新的XmlRootAttribute(“Mitarbeiterstatistik”);
XmlWriter=XmlWriter.Create(@“D:\test.xml”);
序列化器。序列化(编写器,列表);
writer.Close();

还是有机会继续我的Mitarbeiterstatistik课程???并禁用我的列表元素???

如果要尝试Linq to Xml:

XDocument xDoc = new XDocument(new XElement("Mitarbeiterstatistik"));

foreach (var mitarbeiter in list)
{
    xDoc.Root.Add(
            new XElement("Mitarbeiter",
                new XElement("Vorname" ,mitarbeiter.Vorname ),
                new XElement("Nachname" ,mitarbeiter.Nachname ),
                new XElement("Id" ,mitarbeiter.Id )));

}

xDoc.Save(@"d:\test.xml");

您可以使用[XmlElement]而不是[XmlArray],使用您想要获取的元素名来退出属性“List”(我无法正确理解您的问题):

[XmlRoot("Mitarbeiterstatistik")]
public class Mitarbeiterstatistik
{
  private List<Mitarbeiter> list = new List<Mitarbeiter>();

  [XmlElement("Mitarbeiter")]
  public List<Mitarbeiter> List {get; set;}     
}
[XmlRoot(“Mitarbeiterstatistik”)]
公共类Mitarbeiterstatistik
{
私有列表=新列表();
[XmlElement(“Mitarbeiter”)]
公共列表{get;set;}
}

您是否尝试过将
[XmlArray(“列表”)]
替换为
[XmlArray()]
XDocument xDoc = new XDocument(new XElement("Mitarbeiterstatistik"));

foreach (var mitarbeiter in list)
{
    xDoc.Root.Add(
            new XElement("Mitarbeiter",
                new XElement("Vorname" ,mitarbeiter.Vorname ),
                new XElement("Nachname" ,mitarbeiter.Nachname ),
                new XElement("Id" ,mitarbeiter.Id )));

}

xDoc.Save(@"d:\test.xml");
[XmlRoot("Mitarbeiterstatistik")]
public class Mitarbeiterstatistik
{
  private List<Mitarbeiter> list = new List<Mitarbeiter>();

  [XmlElement("Mitarbeiter")]
  public List<Mitarbeiter> List {get; set;}     
}