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
)。
更新:我将接口转换为抽象类型(类),因此根本没有接口,序列化仍然失败。