我正在实施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。任何建议? –