2009-03-06 6 views
5

オブジェクトは.NET XMLシリアライザを使用してデータベースにシリアライズされます。オブジェクトは時間とともに変化する可能性があるため、複数のバージョンが同時にデータベースに存在します。バージョン間で.netオブジェクトをシリアライズおよびデシリアライズするためのベストプラクティス

このオブジェクトを最新版にデシリアライズできるように、コードを構築する最適な方法については、ご意見ください。 (インターフェイス/マップ/手動シリアル化など)

答えて

1

これはアプリケーションによって異なります。古いアプリケーションが中央のデータベースや他のソースから新しいデータオブジェクトに遭遇する可能性のある分散型の豊富なアプリケーションですか? (以前のバージョンのオフィスアプリケーションには、新しいドキュメントフォーマットを扱ういくつかの方法が必要です)。そうなら、明示的なスキーマバージョン番号を付けたカスタムシリアル化と逆シリアル化が必要です。私は各要素と属性に明示的なメタデータを置いて、要素/属性(およびそうでなければデフォルト値)を理解しなければならないかどうかを述べます。これは、もちろんかなりのスペースを消費し、コードの複雑さを増やすことができます。

しかし、答えは実際にデータベースにシリアライズする理由によって異なります。関係する能力のためにデータベースを使用することに興味はありませんか?それ以外の場合は、O/Rマッピングソリューションが重要です。

0

プロパティを削除したり名前を変更したりしないでください。追加するだけです。

すべてのプロパティにデフォルト値を割り当てます。

これは、xmlシリアライザが古いオブジェクトを新しいオブジェクトに逆シリアル化できることを保証し、そのオブジェクトは「sane」値を持つことになります。

0

Alex Reitbortが教えてくれるもの。

また、シリアル化されたオブジェクトのスキーマバージョン番号を持っている古い値の

2

を処理するためにISerializableインターフェイスを実装することができます。カスタムデシリアライゼーションを使用して、まずバージョン属性をチェックし、古いバージョンであることが判明した場合は、デシリアライズする前に最新のスキーマにアップグレードします。

+0

私はこれが最も柔軟な解決策だと思います。 –

2

Look hereこれはWCF datacontractバージョン管理のベストプラクティスについての話ですが、これは実際よりも具体的ですが、これらのパターンはあなたと同じ問題を解決します。

関連する問題