2

我在 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"
                }
            }
        }
    }
}
4

0 回答 0