如何将XmlElementAttribute用于列表<;T>;

本文关键字:lt gt 列表 XmlElementAttribute 用于 | 更新日期: 2023-09-27 18:00:06

我有一个这样的类:

public class Level
{
    [XmlAttribute]
    public string Guid { get; set; }
}
public class LevelList : List<Level>
{
}
public class Test
{
    public LevelList CalLevelList { get; set; }
}

使用XmlSerializer,我得到如下输出:

      <CalLevelList>
        <Level Guid="0de98dfb-ce06-433f-aeae-786b6d920aa6"/>
        <Level Guid="0de98dfb-ce06-433f-aeae-786b6d920aa7"/>
      </CalLevelList>

这在技术上是正确的。然而,在不更改类名的情况下,我想使输出看起来像这样:

      <Levels>
        <L Guid="0de98dfb-ce06-433f-aeae-786b6d920aa6"/>
        <L Guid="0de98dfb-ce06-433f-aeae-786b6d920aa7"/>
      </Levels>

我知道这可以通过属性来实现,但不知道如何实现。当我向Test类添加一个属性时,如下所示:

    public class Test
    {
        [XmlElement("Levels")]
        public LevelList CalLevelList { get; set; }
    }

输出相当惊人:

<Levels Guid="0de98dfb-ce06-433f-aeae-786b6d920aa6"/>
<Levels Guid="0de98dfb-ce06-433f-aeae-786b6d920aa7"/>

这意味着,我失去了父节点。我指定的elementname变成了一个节点名称。为什么这样?如何使其发挥作用?

如何将XmlElementAttribute用于列表<;T>;

试试这个:

public class Test
{
    [XmlArray("Levels")]
    [XmlArrayItem("L")]
    public LevelList CalLevelList { get; set; }
}