我对编程相当陌生(在课堂环境之外)。
我正在开发一个有插件的应用程序。每个插件打包/解包它的状态(作为字典)并将自己添加到包含所有打包状态的字典中。我正在使用 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 的文档,但我几乎不理解它以及如何使其在我的代码中工作。我想一旦插件获得其打包状态以解包,我需要对 Converters 或 Parsing 做一些事情。打包后,插件的第一个字典条目被保存为 DataTable。然后,当在 Unpack 中时,它是带有 : 分隔符的值中的实际数据表。
我会提供屏幕截图,但我还没有弄清楚如何做到这一点。任何想法我错过了什么?谢谢!