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
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 17:10
fuente por usuario

votos
3

Eche un vistazo al atributo XmlArrayAttribute

Respondida el 12/03/2009 a las 17:07
fuente por usuario

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 17:07
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more