Как сериализовать типизированный член интерфейса

У меня есть класс со свойством, определенным как интерфейс. Пользователи моего класса могут присвоить этому свойству любую реализацию класса, реализующую интерфейс. Я хочу иметь возможность загружать это состояние класса из текстового файла на диске. Пользователи должны иметь возможность вручную изменять 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>
9
задан itaysk 20 April 2012 в 20:07
поделиться