【问题标题】:How to use XmlElementAttribute for List<T>?如何将 XmlElementAttribute 用于 List<T>?
【发布时间】:2011-06-24 00:22:09
【问题描述】:

我有这样的课:

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 成为节点名称。为什么这个?如何让它发挥作用?

【问题讨论】:

    标签: c# .net xml serialization xml-attribute


    【解决方案1】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2011-01-17
      • 2019-04-13
      • 1970-01-01
      • 2014-02-05
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      相关资源
      最近更新 更多