反序列化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")?
- 为什么会改变?
- 我能做些什么来反序列化我的旧文件?
发现错误:我更改了类DataSource
的名称空间(必须是由ReSharper触发的反射…)。将名称空间更改为原始版本可以修复此问题。id似乎是一个名称空间散列。