Атрибут XmlArray, примененный к производному классу List - PullRequest
2 голосов
/ 07 марта 2012

У меня есть

public class Convolutions : List<Convolution> { }

Который сериализуется как xml:

<ArrayOfConvolution>
     <Convolution>

Но я бы хотел:

<Convolutions>
    <Convolution>

Но использовать невозможно [XmlArray("Convolutions")] или [XmlElement(ElementName = "Convolutions")] в классе.
В любом случае, чтобы достичь этого?

Ответы [ 2 ]

3 голосов
/ 07 марта 2012

[XmlType ( "сверток")]
Общественный класс Convolutions: список {}

1 голос
/ 07 марта 2012

Если это корневой объект, то:

[XmlRoot("Convolutions")]
public class Convolutions : List<Convolution> { }

Если он является членом другого объекта, используйте атрибуты этого члена.

Другой подход, более гибкий во многих случаях, заключается в использовании отдельного объекта-оболочки и инкапсулирует список; честно говоря, наследование от списков обычно не очень полезно. Следующее будет работать:

public class Convolutions {
    [XmlElement("Convolution")]
    public List<Convolution> Items { get; set; }
}

или, если вам не нравится set в вашей коллекции:

public class Convolutions {
    private readonly List<Convolution> items = new List<Convolution>();
    [XmlElement("Convolution")]
    public List<Convolution> Items { get { return items; } }
}
...