我在 Windows Phone 应用程序中接收到一些动态 JSON,我需要能够将其完全反序列化为可以保存到隔离存储中的对象。
对于此应用程序,最好避免被锁定在类结构中,因为我无法准确预测将从服务器返回的 JSON 类型。
这是我如何使用 Json.NET 反序列化的示例:
JsonConvert.DeserializeObject<Dictionary<string, object>>(jsonString);
在此示例中,字典中保存的值可能是列表或字典或字符串。
这种方法的问题是 JsonConvert.DeserializeObject(...) 方法似乎只是执行浅转换。嵌套对象的类型为 JArray 或 JObject。当我尝试保存这些对象时,会引发以下异常:
“不应使用数据协定名称 ArrayOfJTokenNewtonsoft.Json.Linq 键入 Newtonsoft.Json.Linq.JArray。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到列表中传递给 DataContractSerializer 的已知类型。”
我在这里有什么明显的遗漏吗?
在 Android 和 iOS 平台上,使用 3rd 方 JSON 库实现可以轻松完成。
这是一些 JSON 示例,但请记住,我无法确定我将提前解码的 JSON 的确切结构:
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}