2011-11-20 12 views
13

Tengo un gráfico de objetos simple que me gustaría serializar, no he podido encontrar una solución a este problema. Aquí está:¿Cómo obtengo XmlSerializer para no serializar etiquetas de contenedor?

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

Esto produce el siguiente XML:

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

me gustaría quitar la etiqueta de contenedor "elementos" para producir este lugar:

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

tengo intenté todo tipo de soluciones, pero parece que no puedo encontrar una solución.

Respuesta

21

especificar un nombre de elemento en su atributo [XmlElement]:

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

Según this article en MSDN, se eliminará el elemento de envoltura alrededor de los elementos en serie.

+2

El artículo es correcto; eso eliminará el elemento contenedor. El 'Type = typeof (...)' es redundante pero inofensivo, por cierto. –

+2

La sintaxis es contraria a la intuición ya que "Artículos" es una colección de "MyDatum" y no un solo objeto "MyDatum". Nunca he adivinado esto como una posible solución en mis experimentos. Supongo que puedes decir "Si no funciona, ve contra tu intuición". –

Cuestiones relacionadas