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

У меня есть класс со свойством, определенным как интерфейс. Пользователи моего класса могут присвоить этому свойству любую реализацию класса, реализующую интерфейс. Я хочу иметь возможность загружать это состояние класса из текстового файла на диске. Пользователи должны иметь возможность вручную изменять 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>
-121 ---1310406 ​​- как добавить разрешения в Django to Models и протестируйте его с помощью оболочкиЯ добавил класс Meta в свою модель и синхронизировал БД, а затем создал объект в оболочке. он возвращает false, поэтому я действительно не могу понять, где ошибка или чего не хватает, есть ли какие-то...

Я добавил класс Meta в свою модель и синхронизировал БД, а затем создал объект в оболочке. он возвращает false, поэтому я действительно не могу понять, где ошибка или чего не хватает, может быть, в каких-то других файлах есть какая-то конфигурация..

class Employer(User):#Employer inherits from User
    employer_verified = models.BooleanField(default=False)

    class Meta:
        permissions = (
            ("is_member", "Friendly permission description"),
        )

emp = Employer.objects.create(blablabla)
emp.save()
emp.has_perm('myappname.is_member')
9
задан Guilherme David da Costa 20 April 2012 в 19:51
поделиться