У меня есть класс со свойством, определенным как интерфейс. Пользователи моего класса могут присвоить этому свойству любую реализацию класса, реализующую интерфейс. Я хочу иметь возможность загружать это состояние класса из текстового файла на диске. Пользователи должны иметь возможность вручную изменять XML-файл, чтобы контролировать работу приложения.
Если я попытаюсь сериализовать свой класс, он скажет мне, что я не могу сериализовать интерфейс. Я понимаю, что сериализатор ничего не знает о структуре класса свойства, зная только, что он реализует интерфейс.
Я ожидал, что он вызовет GetType для члена и отразится на структуре фактического класса. Есть ли способ добиться этого? Есть ли другой способ реализовать мое требование?
Изменить: Уточнение моих намерений: Допустим, у меня есть этот класс:
class Car
{
IEngine engine
}
class ElectricEngine : IEngine
{
int batteryPrecentageLeft;
}
class InternalCombustionEngine : IEngine
{
int gasLitersLeft;
}
, а у пользователя класса есть класс с
Car myCar = new Car();
myCar.Engine = new ElectricEngine() {batteryPrecentageLeft= 70};
. Когда я сериализую класс myCar, я ожидаю, что xml будет выглядеть так:
<Car>
<Engine>
<ElectricEngine>
<batteryPrecentageLeft>70</batteryPrecentageLeft>
</ElectricEngine>
<Engine>
</Car>