Aquí podría ser tu PUBLICIDAD


Cómo serializar colecciones en .net

votos
4

Quiero serializar una colección de objetos para su almacenamiento / recuperación desde mi archivo app.config. (Estoy usando el código de un ejemplo de la entrada de blog de Jeff Attwood The Last Configuration Section Handler .. Revisited ).

Lo que quiero saber es por qué colecciones de objetos de tipo

public class MyClass
{
  ...
}

ser serializado a un elemento xml llamado

<ArrayOfMyClass>...</ArrayOfMyClass> 

En este ejemplo, estoy usando una lista genérica de objetos MyClass. También intenté crear una clase nueva que herede de List y el xml resultante sea exactamente el mismo.

¿Hay alguna manera de anular el nombre del elemento xml utilizado al serializar / deserializar?

Publicado el 12/03/2009 a las 17:02
fuente por usuario Matthew Dresser
En otros idiomas...        العربية       

3 respuestas

votos
4

Cuando heredas de List, puedes probar algo a lo largo de las líneas de

[Serializable]
[System.Xml.Serialization.XmlRoot("SuperDuperCollection")]
public class SuperDuperCollection : List<MyClass> { ... }

para decorar su clase, usar los diferentes atributos Xml debe permitirle tener control sobre la forma en que se genera el XML cuando se serializa.

Solo una edición adicional con algunos códigos de prueba y resultados:

[Serializable]
public class MyClass
{
public int SomeIdentifier { get; set; }
public string SomeData { get; set; }
}

....

SuperDuperCollection coll = new SuperDuperCollection
{
    new MyClass{ SomeData = "Hello", SomeIdentifier = 1},
    new MyClass{ SomeData = "World", SomeIdentifier = 2}
};

Console.WriteLine(XmlSerializeToString(coll));

Salida:

<SuperDuperCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <MyClass>
    <SomeIdentifier>1</SomeIdentifier>
    <SomeData>Hello</SomeData>
  </MyClass>
  <MyClass>
    <SomeIdentifier>2</SomeIdentifier>
    <SomeData>World</SomeData>
  </MyClass>
</SuperDuperCollection>
Respondida el 12/03/2009 a las 05:10
fuente por usuario Quintin Robinson


Aquí podría ser tu PUBLICIDAD


votos
3

Eche un vistazo al atributo XmlArrayAttribute

Respondida el 12/03/2009 a las 05:07
fuente por usuario Rowland Shaw

votos
3

Ellos no lo hacen si son elementos secundarios de un tipo - se puede utilizar [XmlRoot], [XmlType], [XmlElement]y [XmlArray]y [XmlArrayItem]en varias combinaciones para obtener resultados diferentes - por desgracia, los detalles dependen de la disposición exacta ...

Respondida el 12/03/2009 a las 05:07
fuente por usuario Marc Gravell