Каковы правила сериализации для SettingsBase - PullRequest
0 голосов
/ 25 сентября 2018

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 также следует заметить).

Обновление : я повернулинтерфейс в абстрактный тип (класс), так что интерфейсов больше нет, сериализация все равно не удалась.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...