私はプログラミングにかなり慣れていません (教室環境以外で)。
私はプラグインを持つアプリケーションに取り組んでいます。各プラグインは、その状態を (ディクショナリとして) パック/アンパックし、すべてのパック状態を含むディクショナリに追加するために自身を送信します。プロジェクトが保存されているか開かれているかに応じて、Json.Netを使用して各プラグインをシリアル化/逆シリアル化し、独自のクラスにパック/アンパックします。
私が抱えている問題は、最初のプラグインがパックされた状態のディクショナリ バージョンを取得してアンパックし、各プロパティの再作成を開始したときです。最初のプロパティ (ディクショナリの最初の項目) は DataTable です。次のようなエラーが表示されます。
Unable to cast object of type 'Newtonsoft.Json.Linq.JArray' to
type 'System.Data.DataTable'.
これがシリアル化するための私のコードです。
IDictionary<string, IDictionary<string, object>> pluginStates =
new Dictionary<string, IDictionary<string, object>>();
signaller.RaiseSaveRequest(pluginStates); //gets all of the plugins' packedState
JsonSerializer serializer = new JsonSerializer();
serializer.ObjectCreationHandling = ObjectCreationHandling.Replace;
serializer.TypeNameHandling = TypeNameHandling.All;
using (StreamWriter sw = new StreamWriter(strPathName))
using (JsonWriter writer = new JsonTextWriter(sw))
{
serializer.Serialize(writer, pluginStates);
}
そしてデシリアライズ。
IDictionary<string, IDictionary<string, object>> pluginStates =
new Dictionary<string, IDictionary<string, object>>();
JsonSerializer serializer = new JsonSerializer();
serializer.ObjectCreationHandling = ObjectCreationHandling.Replace;
serializer.TypeNameHandling = TypeNameHandling.All;
StreamReader sr = new StreamReader(fullName);
JsonTextReader reader = new JsonTextReader(sr);
string json = sr.ReadToEnd();
pluginStates = serializer.Deserialize<IDictionary<string, IDictionary<string, Object>>>(reader);
pluginStates = JsonConvert.DeserializeObject<IDictionary<string, IDictionary<string, Object>>>(json);
sr.Close();
reader.Close();
signaller.UnpackProjectState(pluginStates);
NewtonSoft.Json のドキュメントを見てみましたが、ほとんど理解できず、コードで機能させる方法もわかりません。プラグインがパックされた状態になったら、コンバーターまたは解析で何かをする必要があると考えています。圧縮すると、プラグインの最初の辞書エントリが DataTable として保存されました。次に、Unpack では、値の実際の dataTable に : 区切り記号が付けられます。
スクリーンショットを提供しますが、その方法がわかりません。私が見逃しているアイデアはありますか?? ありがとう!