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