2011-11-20 1 views
13

Ho un semplice oggetto grafico che vorrei serializzare, non sono stato in grado di trovare una soluzione a questo problema. Eccolo:Come si ottiene XmlSerializer per non serializzare i tag contenitore?

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

Questo produce il seguente XML:

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

Vorrei rimuovere il tag contenitore "Elementi" per la produzione di questo, invece:

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

ho provato tutti i tipi di soluzioni, ma non riesco a trovare una soluzione.

risposta

21

specificare un nome di elemento nella tua attributo [XmlElement]:

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

Secondo this article su MSDN, questo sarà rimuovere l'elemento wrapper elementi serializzati.

+2

L'articolo è corretto; che in effetti rimuoverà l'elemento wrapper. Il 'Type = typeof (...)' è ridondante ma innocuo, btw. –

+2

La sintassi è controintuitiva poiché "Items" è una raccolta di "MyDatum" e non un singolo oggetto "MyDatum". Non l'ho mai immaginato come una possibile soluzione nei miei esperimenti. Immagino che tu possa dire "Se non funziona, vai contro il tuo intuito". –