Ho una classe che ha una proprietà definita come interfaccia. Gli utenti della mia classe possono assegnare a questa proprietà qualsiasi implementazione di classe che implementa l'interfaccia. Voglio essere in grado di caricare questo stato di classe da un file di testo su disco. Gli utenti dovrebbero essere in grado di modificare manualmente il file xml, al fine di controllare l'operazione dell'applicazione.Come serializzare l'elemento digitato nell'interfaccia
Se provo a serializzare la mia classe, mi dice che non posso serializzare un'interfaccia. Capisco che il serializzatore non abbia conoscenza della struttura della classe della proprietà, sapendo solo che implementa un'interfaccia.
Mi sarei aspettato che chiamasse GetType sul membro e riflettesse nella struttura della classe effettiva. C'è un modo per ottenere questo? C'è un altro modo per implementare il mio requisito?
Edit: Chiarire le mie intenzioni: Diciamo che ho questa classe:
class Car
{
IEngine engine
}
class ElectricEngine : IEngine
{
int batteryPrecentageLeft;
}
class InternalCombustionEngine : IEngine
{
int gasLitersLeft;
}
e l'utente classe ha una classe con
Quando ho serializzare l'myCar classe, ho si aspetta che l'xml assomigli a questo:
<Car>
<Engine>
<ElectricEngine>
<batteryPrecentageLeft>70</batteryPrecentageLeft>
</ElectricEngine>
<Engine>
</Car>
Questo funziona, con '[XmlInclude()]' di annunciare i tipi. –
Fondamentalmente volevo evitare l'uso della classe base perché le interfacce sembravano più giuste. Inoltre, non so in anticipo quale tipo di tipi di calcestruzzo l'utente potrebbe utilizzare. (Capisco che ho bisogno di dichiarare quelli in XmlInclude). Posso evitare di sapere in anticipo i tipi di classi che l'utente potrebbe usare? – itaysk
@Henk, OK Penso di aver capito la domanda ora, sì che implicherebbe l'uso di XmlInclude; questo renderebbe il mio suggerimento un po 'inutile. –