Ho un'applicazione C# .NET 3.5 in cui desidero serializzare una classe contenente uno List<>
in XML. La mia classe si presenta così:Serializzare un elenco <> esportato come ICollection <> in 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_; }
}
}
Se io popolo in questo modo:
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);
E poi serializzare in questo modo:
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);
}
ottengo un file che assomiglia a questo:
<Foo>
<Something>My String</Something>
</Foo>
Ma, quello che voglio è X ML che assomiglia a questo:
<Foo>
<Something>My String</Something>
<Bar>
<!-- Data from first Bar -->
</Bar>
<Bar>
<!-- Data from second Bar -->
</Bar>
</Foo>
Che cosa devo fare per ottenere la List<>
a comparire in XML?
Non credo che si possa 'XmlSerialize' un'interfaccia. Perché vuoi serializzare come 'ICollection' comunque? Serializzare come 'Lista' e restituire al consumatore un 'ICollection ' ... ??? –
IAbstract
@IAbstract - Non sono sicuro di aver capito. Intendi contrassegnare la 'lista privata bar_' con il tag' [XmlElement ("Bar")] '? Questo non cambia l'output. Inoltre, la documentazione di 'XmlSerializer' suggerisce che funzioni con entrambe le interfacce' IEnumerable' e 'ICollection'. http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer%28v=VS.90%29.aspx –
PaulH
Penso che IAbstract ce l'abbia - non è possibile serializzare un'interfaccia. Quindi, invece, dovresti cambiare Foo in modo che Bars sia un elenco, non un ICollection –