SoapFormatter版本控制问题

时间:2009-04-30 23:10:29

标签: c# soap serialization soap-serialization

在我维护的应用程序(C#)中,有一些序列化对象存储在数据库中,有些是在几个版本之前创建的。

现在,当应用程序尝试反序列化这些对象时,它会抛出异常: 解析错误,没有与Xml键相关联的程序集....(程序集名称和版本)

据我所知,当SoapFormatter尝试反序列化对象时,它首先检查反序列化程序集是否与序列化程序集相同,如果不是,它将抛出上述错误消息。会是这种情况吗?

如果是这种情况,是否有办法转换这些旧数据,使其可以被最新版本的应用程序读取?

另一方面,我正在考虑编写一个程序,使其具有相同的程序集名称和版本,假装是序列化这些对象的同一程序集,是否可能?

2 个答案:

答案 0 :(得分:1)

我没有试过这个,但我想知道你是否可以使用XSLT将旧版本转换为更新的“版本”结构。

答案 1 :(得分:0)

Jordan提到的XSLT转换可能会起作用,但在我的情况下,我需要更改一些属性和节点名称使其相当复杂。

我最后只使用Regex.Replace转换更改的程序集名称和成员名称,如下所示:

newData = Regex.Replace(textData, "(" + String.Join("|", keys) + ")",
                        new MatchEvaluator(this.EvaluateReplacement));

string EvaluateReplacement(Match m)
{
    if (this.convertDict.ContainsKey(m.Value))
    {
        return this.convertDict[m.Value];
    }
    return m.Value;
}

其中this.convertDict是包含转换映射的Dictionary对象。