SettingsBase
- это тип, который используется в качестве настроек WinForms.
Допустим, у меня есть базовый тип:
[Serializable]
public sealed class DeviceConfiguration
{
public string DeviceName;
public DeviceDetails Details;
}
Я могу использовать этот типв моих настройках (т.е. он сериализуется и сохраняется правильно).Но позвольте мне быть полиморфным:
[Serializable]
public sealed class DeviceConfiguration
{
public string DeviceName;
public IDeviceDetails Details; // interface (or abstract type: see update)
}
Такой тип не сериализуется и не сохраняется (через SettingsBase
, в моем случае в качестве настроек WinForms).
Я пробовал несколько приемов, выводя IDeviceDetails
из ISerializable
, помечая это поле как не сериализуемое (просто проверка работоспособности), выводя этот тип (DeviceConfiguration
) из ISerializable
и предоставляя пользовательские методыдля сериализации.Нет-нет, интерфейс на плате - он не будет сериализован.
Так есть ли какое-то правило, которое действительно говорит: «поле с типом интерфейса делает весь тип не сериализуемым»?Или это какая-то неприятная ошибка?Или я упускаю некоторые важные детали?
Я не знал, что интерфейс не может быть сериализован - ISerializable - это интерфейс - но в любом случае, он не объясняет эту историю -- здесь сериализация всего типа не удалась, даже если интерфейсное поле было пропущено (пользовательская сериализация пропустила это поле, и NonSerializable
также следует заметить).
Обновление : я повернулинтерфейс в абстрактный тип (класс), так что интерфейсов больше нет, сериализация все равно не удалась.