XmlSerializer - 具有不同属性的相同元素

Gop*_*opi 2 c# xml-serialization xmlserializer

预期的XML输出:

<add>
 <doc>
  <field name="id">1</field>
  <field name="Myname">MyName1</field1>
 </doc>
 <doc>
  <field name="id">2</field>
  <field name="Myname">MyName2</field>
 </doc>
 <doc>
  <field name="id">3</field>
  <field name="Myname">MyName3</field>
 </doc>
</add>
Run Code Online (Sandbox Code Playgroud)

为了获得上述XML文档,我设计了以下类

public class doc
{
    [XmlElement("field")]
    public ID Id
    {
        get;
        set;
    }
    [XmlElement("field2")]
    public Name Myname
    {
        get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

名称类将是

 public class Name 
{
    [XmlText]
    public string Namevalue
    {
        get;
        set;
    }
    [XmlAttribute("name")]
    public string Myname
    {
        get;
        set;
    } 
}
Run Code Online (Sandbox Code Playgroud)

XmlSerializer代码:

XmlSerializer serializer = new XmlSerializer(typeof(List<doc>), new XmlRootAttribute("add"));
Run Code Online (Sandbox Code Playgroud)

这给了我以下输出

<add>
 <doc>
  <field name="id">1</field>
  <field2 name="Myname">MyName1</field2>
 </doc>
 <doc>
  <field name="id">2</field>
  <field2 name="Myname">MyName2</field2>
 </doc>
 <doc>
  <field name="id">3</field>
  <field2 name="Myname">MyName3</field2>
 </doc>
</add>
Run Code Online (Sandbox Code Playgroud)

这里field2应该是字段我知道我需要将field2更改为doc类中的字段,但这会导致错误.

我应该如何设计我的课程以获得预期的输出?

编辑: ID类也将看起来像具有自己的属性的Name类

Om *_*ane 5

两种选择

 [XmlRoot("doc")]
    public class Doc
    {
        [XmlElement("field",Order = 1)]
        public Field Id
        {
            get;
            set;
        }
        [XmlElement("field", Order = 2)]
        public Field Name
        {
            get;
            set;
        }
    }

    [XmlRoot("doc")]
    public class Field
    {
        [XmlText]
        public string Value
        {
            get;
            set;
        }

        [XmlAttribute("name")]
        public string Name
        {
            get;
            set;
        }
    }
enter code here
Run Code Online (Sandbox Code Playgroud)

这将按给定的顺序产生元素.或者使用类似的数组

[XmlRoot("doc")]
    public class Doc
    {
        [XmlArray("field")]
        public Field[] Fields
        {
            get;
            set;
        }
    }
Run Code Online (Sandbox Code Playgroud)