2017-08-01 4 views
2

を上書きします。顧客は、データセット内のデータテーブルに5つ以上の列を追加する必要があります。その表の列を定義しますが、逆シリアル化が発生すると、データ可能列は元の状態に、つまり新しい列がなくても上書きされます。JSONデシリアライゼーションは、私がNewtonSoft.jsonを使用してJSONの簡単なDesearializationを使用している既存のDataTable構造

データ型には常に列の追加と削除があります。それはビジネスです。オリジナルのjsonレイアウトを使用した何千もの既存のレコードで、既存のデータ構造を変更せずにデータをロードし、ユーザーが新しい列にデータを追加できるようにする方法はありますか?

私はjsonを初めて利用しており、利用可能なヘルプがあれば分かります。

答えて

1

特定のスキーマを使用してDataSetをシリアライズした場合、デシリアライズ時にその正確なスキーマを取り戻すことになります。これが、シリアライゼーションの仕組みです。マージする既存のDataSetがある場合、またはデシリアライズ後に追加する追加の列がある場合は、プログラムでそれを行う必要があります。あなたのコード例で

datasetが既存DataSetであると仮定すると、あなたがして、既存のDataSet行にそれをマージし、その後、必要に応じてスキーマを固定し、その中を歩く、新しい、一時的なDataSetにデシリアライズしたいと思います行。

スキーマが動的である場合は、列のメタデータをリストのどこかに格納する必要があります。少なくとも、カラム名とタイプ。デシリアライズした後、あなたは、DataSetから欠落しているすべての列にそのリストを歩くことができるプログラム的に正しい型の列を作成し、それらを追加します。


あなたを助けるかもしれDataSet.Merge方法がありますが、欠落しているスキーマをどのように処理するかについていくつかの選択肢があります。マージメソッドが呼び出されると、スキーマが が変更された可能性があるため

二データセットのスキーマは オブジェクトが比較されます。たとえば、企業間のシナリオでは、新しい カラムが自動化されたプロセスによってXMLスキーマに追加されている可能性があります。 ソースDataSetに、ターゲットにスキーマ要素(追加されたDataColumn オブジェクト)が含まれている場合、missingSchemaAction引数を MissingSchemaAction.Addに設定して、スキーマ要素を に追加できます。その場合、マージされたデータセットには、 スキーマとデータが追加されています。

それはを使用して、デシリアライゼーションラインを交換するような単純なことがあります

dataset.Merge(JsonConvert.DeserializeObject(Of DataSet)(json), true, MissingSchemaAction.AddWithKey) 
+0

おかげで、あなたは正しい方向に私を指摘しました。 –

+0

このコードが問題を解決した場合は、それを受け入れられた答えとして破棄します。それがちょうどあなたが答えを見つけるのを助けたが、それを働かせるためにそれを修正しなければならなかったら、あなた自身の答えとしてあなたの解決策を掲示するべきです(あなたはそれをすることが許されます)。これは、同じ問題を抱えている人を助けるでしょう。 –

+0

これは私の最初のStackOverflowの使用であるので、お詫び申し上げます。 –

関連する問題