Как мне заставить XmlSerializer не сериализовать теги контейнера? - PullRequest
14 голосов
/ 20 ноября 2011

У меня есть простой граф объектов, который я хотел бы сериализовать, я не смог найти решение этой проблемы. Вот оно:

   [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;
            }
        }
    }

Это приводит к следующему XML:

<MyData>
    <Items>
        <MyDatum/>
        <MyDatum/>
        ...
    </items>
</MyData>

Я бы хотел удалить тег контейнера "Items", чтобы получить вместо этого:

<MyData>
    <MyDatum/>
    <MyDatum/>
    ...
</MyData>

Я пробовал все виды решений, но, похоже, не могу найти решение.

1 Ответ

22 голосов
/ 20 ноября 2011

Укажите имя элемента в своем атрибуте [XmlElement]:

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

Согласно этой статье в MSDN это приведет к удалению элемента-оболочки вокруг сериализованноготовар.

...