【发布时间】:2016-05-17 07:48:18
【问题描述】:
我对反序列化字典有疑问。我无法将 Dictionary 中的对象转换为我的类型 Remiza...我正在使用 Json.net,我可以看到 Dictionary 中的对象是 JObject 而不是 Object,我无法将它们转换为我的类型。这是我的序列化/反序列化代码:
private static Dictionary<Type, List<Object>> _ekstensje = new Dictionary<Type, List<Object>>();
public static void SerializeDictionary()
{
string json = JsonConvert.SerializeObject(_ekstensje);
System.IO.StreamWriter file = new System.IO.StreamWriter(@"c:\tmp\dictionary.json");
file.WriteLine(json);
file.Close();
}
public static void DeserializeDictionary()
{
string json;
System.IO.StreamReader file = new System.IO.StreamReader(@"c:\tmp\dictionary.json");
json = file.ReadToEnd();
file.Close();
_ekstensje = JsonConvert.DeserializeObject<Dictionary<Type, List<Object>>>(json);//Deserializacja Dictionary
Debug.WriteLine(_ekstensje);
}
public static List<Object> GetEkstensja(Type className)
{
List<Object> list = _ekstensje[className];
return list;
}
执行:
ObjectPlus.DeserializeDictionary();
List<Object> list = ObjectPlus.GetEkstensja(typeof(Remiza));
foreach (Object o in list)
{
Remiza r = (Remiza) o;
listaRemiz.Add(r);
}
我的问题是在投射到“Remiza”时出现了异常:
An exception of type 'System.InvalidCastException' occurred in Osek_MAS_WPF.exe but was not handled in user code. Additional information: Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'Osek_MAS_WPF.Remiza'.
感谢您的帮助!
【问题讨论】:
-
如果您使用对象类型的字典,那么 JSON.net 可以为您提供的最好的就是 Jobject。您没有指定它应该尝试解析的类型,因此您将无法从中获得更具体的类。您可以编写自定义反序列化器或在其中放置强类型。或者将其保留为 Jobject 并手动解析条目。
-
好的,那么如何手动将这些条目从 JObject 解析为我的类型?这正是我想要实现的目标。
标签: c# json dictionary serialization json.net