1

私が保守しているアプリケーション (C#) には、データベースに格納されているシリアル化されたオブジェクトがいくつかあり、いくつかは数バージョン前に作成されています。

アプリがこれらのオブジェクトを逆シリアル化しようとすると、例外がスローされます: Parse Error, no assembly associated with Xml key .... (アセンブリ名とバージョン)

私が理解しているように、SoapFormatter がオブジェクトを逆シリアル化しようとすると、最初に逆シリアル化アセンブリがシリアル化アセンブリと同じかどうかがチェックされ、そうでない場合は上記のエラー メッセージがスローされます。これは当てはまりますか?

その場合、古いデータを最新バージョンのアプリで読み取れるように変換する方法はありますか?

余談ですが、アセンブリ名とバージョンが同じで、それらのオブジェクトをシリアル化したアセンブリと同じふりをするプログラムを作成することを考えていますが、可能ですか?

4

2 に答える 2

0

ジョーダンが言及した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は、変換マッピングを含むディクショナリオブジェクトです。

于 2009-05-08T22:59:46.797 に答える