【发布时间】:2009-06-30 23:38:49
【问题描述】:
我编写了一个类,用于在应用程序会话之间将用户的偏好序列化到磁盘。要读/写,我使用 XmlSerializer.Deserialize() 和 XmlSerializer.Serialize()。一个被序列化的属性是不同应用程序组件的子设置列表。为此,我有如下内容(该属性仅在序列化期间使用):
private readonly Dictionary<SettingType, SubSettings> subSettings;
[XmlArray("SubSettings")]
[XmlArrayItem("SubSetting", Type=typeof(DictionaryEntry))]
public DictionaryEntry[] _SubSettings
{
get
{
int i = 0;
//Make an array of DictionaryEntries to return
DictionaryEntry[] result = new DictionaryEntry[subSettings.Count];
foreach( KeyValuePair<SettingType, SubSettings> setting in subSettings ) {
DictionaryEntry entry = new DictionaryEntry( setting.Key, setting.Value );
result[i] = entry;
i++;
}
return result;
}
set
{
subSettings.Clear();
for( int i = 0; i < value.Length; i++ )
subSettings.Add( (SettingType)value[i].Key, (SubSettings)value[i].Value );
}
}
这对我很有帮助,所有字典的值都是动态的 SubSettings。问题是现在我想让一些 SubSettings 对象成为不同的动态类型(CoolSubSettings : SubSettings)。明显的问题是,如果我这样做,我将无法进行通信,因为 XML 被读取每个 SubSettings 节点应该是什么动态类型,并且不会读取或写入其附加属性。
【问题讨论】:
标签: c# xml inheritance xml-serialization