Un progetto di base contiene una classe base astratta Foo. In progetti client separati, ci sono classi che implementano quella classe base.Serializzazione e ripristino di una classe sconosciuta
mi piacerebbe serializzare e il ripristino di un'istanza di una classe concreta chiamando un metodo sulla classe di base:
// In the base project:
public abstract class Foo
{
abstract void Save (string path);
abstract Foo Load (string path);
}
Si può presumere che, al momento della deserializzazione, tutte le classi necessarie sono presenti . Se possibile, la serializzazione dovrebbe essere eseguita in XML. È possibile rendere la classe base implementare IXmlSerializable.
Sono un po 'bloccato qui. Se la mia comprensione delle cose è corretta, questo è possibile solo aggiungendo un [XmlInclude(typeof(UnknownClass))]
alla classe base per ogni classe di implementazione, ma le classi di implementazione sono sconosciute!
C'è un modo per farlo? Non ho esperienza con la riflessione, ma accolgo anche le risposte che lo utilizzano.
Modifica: Il problema è di serializzazione. Solo la serializzazione sarebbe facile. :-)
rendo conto che è molto vecchio, ma si presenta come una grande soluzione. Mi chiedo solo come usare la funzione FromXml come non del tutto chiara: "T src" non è usato e richiede una istanza di classe. Rimuovendolo, il compilatore fatica a capire cosa sia T. –