c# - 如何将 XmlElementAttribute 用于 List<T>?

标签 c# .net xml serialization xml-attribute

我有这样一个类:

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>

我知道这可以通过属性来完成,但不知道如何做。当我像这样向测试类添加属性时:

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

输出非常令人惊讶:

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

也就是说,我丢失了父节点。我指定的元素名称成为节点名称。为什么这个?如何让它发挥作用?

最佳答案

试试这个:

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

关于c# - 如何将 XmlElementAttribute 用于 List<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6462091/

相关文章:

javascript - 启动 Ajax 操作时停止或隐藏加载面板

.net - SynchronizationContext.Post() 是线程安全的吗?

c# - 如何合并 XML 文件?

java - 使用 xstream 将 XML 解析为 java

c# - 将 Prolog 与 C# 集成

c# - 检索自定义属性参数值?

c# - 使用 LINQ(第 2 部分)选择单个列表的所有唯一组合,不重复

c# - StreamReader.ReadLine 在使用\r 作为行终止符时无法通过 TCP 工作

c# - SyndicationFeed 将 namespace 前缀从 a10 更改为 atom

ruby - 检查字符串是否为 XML 格式