SettingsBase的序列化规则是什么

时间:2018-09-25 10:34:36

标签: c# serialization interface

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,将此字段标记为不可序列化(仅进行完整性检查),从{{1}派生此类型(DeviceConfiguration) },并提供用于序列化的自定义方法。好的,板上的接口-它不会被序列化。

那么是否存在一些规则说“接口类型的字段使整个类型不可序列化”?或者这是一些讨厌的陷阱?还是我错过了一些关键的细节?

我不知道该接口无法序列化-ISerializable 是一个接口-但是无论如何,它并不能解释这个故事-即使在这种情况下,整个类型的序列化也会失败界面字段被忽略(自定义序列化跳过了该字段,还应注意ISerializable)。

更新:我将接口转换为抽象类型(类),因此根本没有接口,序列化仍然失败。

0 个答案:

没有答案