Tengo una aplicación C# .NET 3.5 donde me gustaría serializar una clase que contiene un List<>
a XML. Mi clase es el siguiente:serializar una lista <> exportada como una colección <> a XML
[XmlRoot("Foo")]
class Foo
{
private List<Bar> bar_ = new List<Bar>();
private string something_ = "My String";
[XmlElement("Something")]
public string Something { get { return something_; } }
[XmlElement("Bar")]
public ICollection<Bar> Bars
{
get { return bar_; }
}
}
Si lo pueblan la siguiente manera:
Bar b1 = new Bar();
// populate b1 with interesting data
Bar b2 = new Bar();
// populate b2 with interesting data
Foo f = new Foo();
f.Bars.Add(b1);
f.Bars.Add(b2);
Y luego serializarlo así:
using (System.IO.TextWriter textWriter = new System.IO.StreamWriter(@"C:\foo.xml"))
{
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Foo));
serializer.Serialize(textWriter, f);
}
consigo un archivo que tiene el siguiente aspecto:
<Foo>
<Something>My String</Something>
</Foo>
Pero, lo que quiero es X ML que tiene este aspecto:
<Foo>
<Something>My String</Something>
<Bar>
<!-- Data from first Bar -->
</Bar>
<Bar>
<!-- Data from second Bar -->
</Bar>
</Foo>
¿Qué tengo que hacer para conseguir la List<>
para estar presente en el XML?
no creo que pueda 'XmlSerialize' una interfaz. ¿Por qué quieres serializar como 'ICollection' de todos modos? Serialize como 'List' y devuelva al consumidor un 'ICollection ' ... ??? –
IAbstract
@IAbstract - No estoy seguro de entender. ¿Quiere marcar la 'lista privada bar_' con la etiqueta' [XmlElement ("Bar")] '? Eso no cambia la salida. Además, la documentación 'XmlSerializer' sugiere que funciona con las interfaces' IEnumerable' y 'ICollection'. http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer%28v=VS.90%29.aspx –
PaulH
Creo que IAbstract lo tiene: no se puede serializar una interfaz. Por lo tanto, en su lugar debe cambiar Foo para que Bars sea una lista, no un ICollection –