3

アプリケーション間でデータを交換するためにNetDataContractSerializerを使用しています。アセンブリのバージョンが一致しない場合、 ReadObjectメソッドが例外をスローするようにします。

たとえば、アセンブリ バージョン 1.0.0.0 からオブジェクトをシリアル化し、後で同じアセンブリを使用して逆シリアル化すると、現在はバージョン 1.0.0.1 であり、NetDataContractSerializerは問題なくストリームを飲み込んで逆シリアル化します。

バージョンが一致しない場合、逆シリアル化プロセスを中止することはできますか?

更新: 多くの理由により、バージョン不寛容が必要です。これは、顧客からの要件であると同時に、同じバージョンのアプリケーションからエクスポートされたファイルをインポートが処理することを確実にするための要件でもあります。私のアプリケーションの場合、バージョンを変更すると以前のインポート プロセスが役に立たなくなります。

4

1 に答える 1

1

醜いが効果的(理想的にはルートオブジェクトで):

[DataMember]
private string AppVersion {
    get { return CurrentAppVersion; }
    set {
        if(value != CurrentAppVersion) throw new InvalidOperationException(
            "Data from version " + value + " is not compatible");
    }
}
private const string CurrentAppVersion = "1.0.11a";
于 2011-03-22T09:46:15.883 に答える