在类TKey </tkey,tvalue>上更改后反序列化Dictionary <tkey,tvalue>时出错

时间:2014-07-23 08:27:44

标签: c# xml dictionary datacontractserializer

如果一直在序列化一个通用字典,那就这么简单:

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行位置16的错误。期待元素   来自命名空间的'ArrayOfKeyValueOfDataSourcebooleanClMIOMsG'   'http://schemas.microsoft.com/2003/10/Serialization/Arrays' ..   遇到名字的'元素'   'ArrayOfKeyValueOfDataSourcebooleandM5BGXus',命名空间   'http://schemas.microsoft.com/2003/10/Serialization/Arrays'。

我的问题是:

  • 类型名称中的ID来自哪里(“CIMIOMsG”)?
  • 为什么会改变?
  • 如何反序列化旧文件?

1 个答案:

答案 0 :(得分:0)

发现错误:我更改了类DataSource的命名空间(必须是由ReSharper触发的反射...)。将命名空间更改为原始版本修复了它。 id似乎是命名空间哈希。