我正在實施DotSpatial選項卡/功能區應用程序的項目。每個標籤都是一個插件。當項目被保存時,RaiseSaveRequest事件處理程序創建一個字典,通過e傳遞給每個插件的projectSavedListener。然後在偵聽器中,每個插件的PackState()都會將e.dictPackedStates.adds(pluginName,PackState())打包成一個字典。因此,整個應用程序的狀態保存在dictPackedStates字典中,作爲pluginName,每個插件的字典。JSON序列化/反序列化爲包含字典的字典
我使用JSON.NET來序列化/反序列化文件時,它保存/打開。我認爲我的保存工作正常。
Dictionary<string, object> pluginStates = new Dictionary<string, object>();
signaller.RaiseSaveRequest(pluginStates);
//JSON
string json = JsonConvert.SerializeObject(pluginStates);
StreamWriter sw = new StreamWriter(strPathName);
sw.Write(json);
sw.Close();
我的sw.Write(json);似乎正在將JSON寫入文件。我可以打開文件並查看全部內容。然後在我打開,我有:
Dictionary<string, object> pluginStates = new Dictionary<string, object>();
//JSON
StreamReader sr = new StreamReader(fullName);
string json = sr.ReadToEnd();
pluginStates = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
sr.Close();
signaller.UnpackProjectState(pluginStates);
我的插件狀態是不一樣的,因爲他們是在序列化之前。當他們得到保存,字典是這樣的:(想有一個事先知情同意在這裏的是什麼樣子,無法弄清楚如何)..
pluginStates Count=5,
(hit plus, 1st entry) [0] {[Project Manager, System.Collections.Generic.Dictionary'2[System.String,System.Object]]}
(hit plus on that entry) Key "Project Manager" Value Count =1
(hit plus on value) [0] {[ProjectName, test5.vbpx]}
然後在打開的,它得到的PluginStates的信號機.UnpackProjectState發送關是:
pluginStates Count=5
(hit plus, 1st entry) [0] {[Project Manager, { "ProjectName": "test5.vbpx"}]}
(hit plus) Key "Project Manager" Value { "ProjectName": "test5.vbpx"}
(hit plus on value) .. first thing is base {Newtonsoft.Json.Linq.Jcontainer}
這導致錯誤在所述第一插件的UnpackState(對象objPackedState)。發送的對象是{「ProjectName」:「test5.vbpx」}的值,而不是上面保存的字典中的第一項{{Project Manager,System.Collections.Generic.Dictionary'2 [System.String,System.Object] ]}。
我希望能夠解釋我的問題。有關如何讓deserializeObject以正確格式返回字典的建議? 非常感謝!
我認爲我正在解決問題的正確途徑。具有key:pluginName&value:packedDictionary的主字典被設置爲字典。我將其改爲字典<字符串,字典<字符串,對象>。現在,我收到一條錯誤消息:無法投射類型爲'Newtonsoft.Json.Linq.JArray'的對象在第一個插件中鍵入'System.Data.DataTable',我試圖重新填充它的狀態:this.dt =(DataTable)dictPluginState [「DT」];我有字典進入UnpackState ..解壓縮(字典<字符串,對象> dictPluginState。任何建議? –