2012-03-07 4 views
2

Я имеюXmlArray атрибут применяется к списку класса производного

public class Convolutions : List<Convolution> { } 

Какой сериализующий в XML:

<ArrayOfConvolution> 
    <Convolution> 

Но я хотел бы:

<Convolutions> 
    <Convolution> 

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

ответ

1

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

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

[XmlType ("сверток")]
сверток общественного класса: Список < > свертки {}

+0

Спасибо, что работает - возможно, XmlRoot больше approriate - но действительно 6 или одна половина десятка других ... – Ricibob

+0

XmlRoot работает только тогда, когда это корень. XmlType работает каждый раз. –

Смежные вопросы