特定のスキーマを使用して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)
おかげで、あなたは正しい方向に私を指摘しました。 –
このコードが問題を解決した場合は、それを受け入れられた答えとして破棄します。それがちょうどあなたが答えを見つけるのを助けたが、それを働かせるためにそれを修正しなければならなかったら、あなた自身の答えとしてあなたの解決策を掲示するべきです(あなたはそれをすることが許されます)。これは、同じ問題を抱えている人を助けるでしょう。 –
これは私の最初のStackOverflowの使用であるので、お詫び申し上げます。 –