Eventuali duplicati:
How to serialize an IList<T>?come serializzare un'interfaccia come IList <T>
desidero serializzare una classe (chiamiamolo S
) che contiene una proprietà di tipo IList<T>
dove T
è un'altra classe che ho definito. Ricevo un'eccezione quando tento di serializzare un'istanza della classe S
in XML. Questo è comprensibile dato che lo XmlSerializer
non sa quale classe concreta usare. C'è un modo, si spera usando gli attributi, per specificare quale classe concreta istanziare durante la serializzazione/deserializzazione di un'istanza. La mia implementazione della classe S
crea un'istanza della classe List<T>
. Ecco il codice per illustrare il mio esempio:
using System;
using System.Xml.Serialization;
using System.IO;
[Serializable]
public class T { }
[Serializable]
public class S
{
public IList<T> ListOfTs { get; set; }
public S()
{
ListOfTs = new List<T>();
}
}
public class Program
{
public void Main()
{
S s = new S();
s.ListOfTs.Add(new T());
s.ListOfTs.Add(new T());
XmlSerializer serializer = new XmlSerializer(typeof(S));
serializer.Serialize(new StringWriter(), s);
}
}
spero ci sia un attributo che posso mettere sopra la definizione ListOfTs
che dice al serializzare, "assumere un esempio di List<T>
durante la serializzazione/deserializzazione".
Farei questo, tranne che ciò cambierebbe l'interfaccia per la classe 'S'. Anche se è improbabile che questo abbia un impatto pratico, ma dal punto di principio, mi piacerebbe vedere se c'è un modo per risolvere il problema senza cambiare il tipo. –
La soluzione suggerita, sebbene sia quella funzionante, potrebbe rovinare la tua architettura API pubblica – bashis