プログラミングはかなり新しい。これを逆に機能させる方法に頭を悩ませることはできません。saveメソッドとopenメソッドがあります。保存する:
IDictionary<string, IDictionary<string, object>> pluginStates = new Dictionary<string, IDictionary<string, object>>();
signaller.RaiseSaveRequest(pluginStates); <--goes out and gets packed plugins
//loop through plugins to get values and types
//holds all of the plugin arrays
Dictionary<string, object> dictProjectState = new Dictionary<string, object>();
foreach (KeyValuePair<string,IDictionary<string,object>> plugin in pluginStates)
{
//holds jsonRepresented values
Dictionary<string, object> dictJsonRep = new Dictionary<string, object>();
//holds object types
Dictionary<string, object> dictObjRep = new Dictionary<string, object>();
object[] arrayDictHolder = new object[2]; //holds all of the dictionaries
string pluginKey = plugin.Key;
IDictionary<string, object> pluginValue = new Dictionary<string, object>();
pluginValue = plugin.Value;
foreach (KeyValuePair<string, object> element in pluginValue)
{
string jsonRepresentation = JsonConvert.SerializeObject(element);
object objType = element.Value.GetType().ToString();
dictJsonRep.Add(element.Key, jsonRepresentation);
dictObjRep.Add(element.Key, objType);
}
arrayDictHolder[0] = dictJsonRep;
arrayDictHolder[1] = dictObjRep;
dictProjectState.Add(pluginKey, arrayDictHolder);
}
JsonSerializer serializer = new JsonSerializer();
using (StreamWriter sw = new StreamWriter(strPathName))
using (JsonWriter writer = new JsonTextWriter(sw))
{
serializer.Serialize(writer, dictProjectState);
}
したがって、誰かが保存すると、イベントハンドラーが出て、各プラグインのpackedStateを取得し、それをディクショナリpluginStatesに追加します。次に、pluginStatesの各プラグインを調べ、値のキーとjson文字列バージョンを1つの辞書に追加し、キー、オブジェクトタイプを別の辞書に追加し、それらの2つの辞書を配列に追加してから、 pluginKeyと各プラグインの配列。理由:逆シリアル化するときに、JArrayからタイプDataTableや、プラグインに戻されて開いたときにそれ自体を解凍する辞書内の他のタイプに移行する際に問題が発生します。これを元に戻す方法を理解しようとしているので、ユーザーがプロジェクトを開いたときにdictProjectStateがあり、プラグインを含む1つの辞書を作成するためにコード全体に戻す必要があります。この保存をオープンにミラーリングするにはどうすればよいですか?ありがとう!