Tengo una clase que tiene una propiedad que se define como interfaz. Los usuarios de mi clase pueden asignar a esta propiedad cualquier implementación de clase que implemente la interfaz. Quiero poder cargar este estado de clase desde un archivo de texto en el disco. Los usuarios deberían poder modificar manualmente el archivo xml para controlar el funcionamiento de la aplicación.Cómo serializar el miembro con tipo de interfaz
Si trato de serializar mi clase, me dice que no puedo serializar una interfaz. Entiendo que el serializador no tiene conocimiento sobre la estructura de la clase de la propiedad, solo sabe que implementa una interfaz.
Hubiera esperado que llamara GetType al miembro y reflejara la estructura de la clase real. ¿Hay una manera de lograr esto? ¿Hay alguna otra forma de implementar mi requerimiento?
Editar: Aclaración de mis intenciones: Digamos que tengo esta clase:
class Car
{
IEngine engine
}
class ElectricEngine : IEngine
{
int batteryPrecentageLeft;
}
class InternalCombustionEngine : IEngine
{
int gasLitersLeft;
}
y el usuario clase tiene una clase con
Cuando serializar el miCarro clase, espera que el xml se asemeje a esto:
<Car>
<Engine>
<ElectricEngine>
<batteryPrecentageLeft>70</batteryPrecentageLeft>
</ElectricEngine>
<Engine>
</Car>
Esto funcionará, con '[XmlInclude()]' para anunciar los tipos. –
Básicamente, quería evitar el uso de la clase base porque las interfaces parecían más correctas. Además, no sé de antemano qué tipo de concreto puede usar el usuario. (Entiendo que necesito declararlos en XmlInclude). ¿Puedo evitar tener que saber con anticipación los tipos de clases que el usuario podría usar? – itaysk
@Henk, OK Creo que ahora entiendo la pregunta, sí, eso implicaría usar XmlInclude; esto haría que mi sugerencia fuera poco valiosa. –