如何让XmlSerializer不序列化容器标签?

Joe*_*ers 14 c# xml xml-serialization

我有一个简单的对象图,我想序列化,我无法找到解决这个问题的方法.这里是:

   [XmlRoot]
    public partial class MyData
    {

        private List<MyDatum> itemsField;

        public MyData()
        {
            this.anyAttrField = new List<System.Xml.XmlAttribute>();
            this.itemsField = new List<MyDatum>();
        }

        [XmlElement(Type = typeof(MyDatum))]
        public List<MyDatum> Items
        {
            get
            {
                return this.itemsField;
            }
            set
            {
                this.itemsField = value;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

这会产生以下XML:

<MyData>
    <Items>
        <MyDatum/>
        <MyDatum/>
        ...
    </items>
</MyData>
Run Code Online (Sandbox Code Playgroud)

我想删除"Items"容器标记来代替:

<MyData>
    <MyDatum/>
    <MyDatum/>
    ...
</MyData>
Run Code Online (Sandbox Code Playgroud)

我尝试了各种解决方案,但似乎无法找到解决方案.

Fré*_*idi 22

[XmlElement]属性中指定元素名称:

[XmlElement("MyDatum", Type = typeof(MyDatum))]
public List<MyDatum> Items {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

根据MSDN 上的这篇文章,这将删除序列化项目周围的包​​装元素.

  • 文章是正确的; 这确实会删除包装元素.`Type = typeof(...)`是多余但无害的,顺便说一下. (4认同)
  • 语法是违反直觉的,因为"Items"是"MyDatum"的集合,而不是单个对象"MyDatum".在我的实验中,我从未猜到这是一种可能的解决方案.我想你可以说"如果它不起作用那就违背你的直觉." (3认同)