相关:How can I use polymorphism in XML Serialization?如何序列化/反序列化具有公共根类的对象列表?
我有一个类我写的序列化用户的喜好应用程序会话之间的磁盘。读/写我使用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节点应该是什么动态类型,并且其附加属性不会被读取或写入。
但是底层词典呢?如果我按照你的建议做了什么,它会知道什么时候它进入subSettings字段,静态类型为SubSettings,它应该被序列化为CoolSubSettings? – Dov 2009-06-29 21:39:09