反序列化Dictionary类TKey更改后

本文关键字:TKey TValue Dictionary 反序列化 | 更新日期: 2023-09-27 18:14:33

如果序列化一个泛型字典,像这样简单:

using (Stream stream = File.Open(fileName, FileMode.OpenOrCreate, FileAccess.Write))
{
    var writer = XmlWriter.Create(stream, new XmlWriterSettings { Indent = true });
    var objectType = typeof(T);
    var serializer = new DataContractSerializer(objectType);
    serializer.WriteObject(writer, objectToSerialize);
    writer.Close();
}

,其中T为Dictionary<DataSource, bool>DataSource为自定义类型。现在我在DataSource类上工作,并做了一些更改,没有改变序列化中涉及的DataContract或属性。

现在,我不能再反序列化XML并得到以下异常:

第1行位置163出错。期望的元素'ArrayOfKeyValueOfDataSourcebooleanClMIOMsG'从命名空间"http://schemas.microsoft.com/2003/10/Serialization/Arrays"。遇到带有名称的"元素"ArrayOfKeyValueOfDataSourcebooleandM5BGXus",名称空间"http://schemas.microsoft.com/2003/10/Serialization/Arrays"。

我的问题是:

  • 类型名称中的ID来自哪里("CIMIOMsG")?
  • 为什么会改变?
  • 我能做些什么来反序列化我的旧文件?

反序列化Dictionary<TKey,TValue>类TKey更改后

发现错误:我更改了类DataSource的名称空间(必须是由ReSharper触发的反射…)。将名称空间更改为原始版本可以修复此问题。id似乎是一个名称空间散列。