【发布时间】:2015-11-12 18:06:47
【问题描述】:
我在使用 JavaScriptSerializer 库的 c# 代码中反序列化 JSON 时遇到问题。
这是我的 JSON 示例:
{"A":["a","b","c","d"],"B":["a"],"C":[]}
我正在使用字典来保存 JSON,如下所示:
Dictionary<string, List<string>> myObject;
这就是我解析 JSON 并将其转换为我的对象的方式:
myObject= (Dictionary<string, List<string>>)jsc.DeserializeObject(json);
但是,在运行时,上一行抛出如下 Casting 异常
无法转换类型的对象 System.Collections.Generic.Dictionary2[System.String,System.Object] 输入 System.Collections.Generic.Dictionary2[System.String,System.Collections.Generic.List1[System.String]]
由于某种原因,JavaScriptSerializer 无法识别具有字符串为 List<string> 的 JSON 数组
更新
我用一些硬编码字符串填充了我的Dictionary 数据结构,以查看什么是序列化版本。事实证明这正是我输入的 JSON 字符串。
【问题讨论】:
-
如果您使用 var 定义 myObject 而不是显式地定义为 Dictionary 会发生什么?
-
@Necoras 那也没用 :(
-
@sjokkogutten 有正确的答案,但错误消息确实告诉您为什么抛出异常,
DeserializeObject方法返回Dictionary<string,object>,然后您尝试将其转换为 @ 987654328@。即使您要关闭的泛型类型可以强制转换,但这并不意味着泛型类型本身可以。例如,您不能将IEnumerable<string>转换为IEnumerable<object>,即使字符串确实从对象继承。泛型不是那样工作的。
标签: c# .net json casting javascriptserializer