2

私が現在取り組んでいる XML は、XML シリアライザー (シリアライズ クラスとそのネストされたカウンター パーツ) を使用して直接形成されます。

また、新規の追加がある場合は、シリアライザーによって直接処理されますが、またはPropertyがある場合に問題が発生しますdeletion of property (value Type)removal of and entire class or addition of class

新しい XML ファイルだけでなく、古い XML ファイルも読みたいのですが...どうすればよいのかわかりません..

プロセス

予想される XML アップグレード プロセス

いくつかの方法

しかし、これらは保守可能なコードには適していないと思います

1) カスタム XML パーサーを作成します (これは、変更が行われるたびにパーサーを更新して再度テストする必要があるため、柔軟性が低くなります)。
2) 複数のモデルを使用し、古いものから新しいものに移行する (必須コンポーネントを取得する)
3) 古いファイルをエクスポートし、新しいファイルをインポートする (これには別の XML ファイルも必要であり、ポイント 2 に関連する可能性があります)
4) その他の手段 (提案してください) )

私は XML とそのバージョン管理に精通していません。また、XMLはこれまたはXMLの代わりに使用できる他のファイルタイプ/DBに適していますか

この点に関するヘルプは役に立ちます。

4

2 に答える 2

0

私は通常、ソリューション「#2」に従って、モデル(Myapp.Models.V1.MyModel)の名前空間をバージョン化します。このようにして、古いスキーマをまだ使用しているクライアントとの下位互換性を維持できます(または、古いファイルをロードします)。 .

コメントで示唆されているように、ルート ノードで単純な属性を使用してバージョンを判別し、ファイルの最初の行で xmlreader または単純な正規表現を使用してバージョン番号を読み取ることができます。

ファイルタイプ/db に関する 2 番目の質問に関しては、必要に応じて、MongoDB や RavenDB などのドキュメント データベースを調べることを強くお勧めします。関心の適切な分離を処理するためのエンティティ フレームワーク。デスクトップ アプリの「ファイルの保存」など、ポータブルなものが必要な場合、SqlLite は優れたファイル ベースのデータベースですが、モデルをデータベースにマッピングするために ORM を使用することをお勧めします。

リンク:

于 2013-07-01T08:00:56.140 に答える
0

ほとんどXmlSerializerの場合、かなり優れたバージョン サポートが既に組み込まれています。ほとんどの場合、要素を追加または削除しても問題はありません。余分な (予期しない) データは黙って無視されるか、[XmlAnyElement]/[XmlAnyAttribute]メンバー (存在する場合)に入れられます。往復用。欠落しているデータは初期化されません。唯一の顕著な問題はサブタイプにありますが、サブタイプ (またはタイプ全体) の追加と削除は、シリアライザーにとってかなり基本的なものになります。サブタイプの場合の一般的なオプションの 1 つは、単一のモデルを使用しますが、サブタイプを削除しないことです (前方互換性が必要ない場合は、サブタイプを追加しても問題ありません)。ただし、これが不可能な場合、複数のモデル (リビジョンごとのモデル) は悪いアプローチではありません。

于 2013-07-01T08:02:54.877 に答える