【问题标题】:Parse recursively unknown JSON structure with JSON.NET使用 JSON.NET 解析递归未知的 JSON 结构
【发布时间】:2013-07-18 14:40:19
【问题描述】:

我尝试使用 JSON.NET 解析 JSON 结构。第一级的所有属性都正确反序列化。

我在反序列化字典时遇到问题。对象类型可以是任何类型:string、double、int、bool、List、Dictionary 和递归。

示例 JSON:

 {
     "id":"56d4f8sd4f86ds4f",
     "name":"Azerty",
     "dynProp": {
         "xp":100,
         "life":100,
         "bonus": {
             "force": 100,
             "defense": 100
         },
         "ennemies": {
             "beast": {
                 "wolf": 100,
                 "bear": 20
             }
         }
     }
 }

dynProp 节点中的所有数据都是动态的,我不知道对象的类型、深度或任何东西。

dynProp 对象的输出是这样的:

{{"dynProp","{xp:100, life: 100, bonus: {...}, ...}"}}

事实上,JSON.NET 将对象值放入 jobject 而不是内部字典或类似的东西。

我尝试添加这样的序列化设置:

new JsonSerializerSettings
    {
        TypeNameHandling = TypeNameHandling.All,
        TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple
    }

但是没有成功...

提前感谢您的帮助!

编辑:我对另一个框架持开放态度,但它必须在 .net 2.0 上工作。

【问题讨论】:

    标签: c# json.net


    【解决方案1】:

    我知道这个问题是关于 JSON.NET 的,但希望你不知道很棒的 ServiceStack 库,我想添加一个建议,建议你改为使用它。具体来说,ServiceStack.Text 命名空间有一个 JSON 序列化器 much faster than JSON.NET's serializer

    此外,他们有一个 JSONObject.Parse 方法可以更好地处理您的用例(我相信)。请参阅此堆栈溢出帖子,它与您正在寻找的内容非常匹配:

    ServiceStack.Text.JsonObject.Parse vs. NewtonSoft.Json.Linq.JObject.Parse for nested tree of 'dynamic' instances?

    【讨论】:

    • 对不起!我没有意识到你在 2.0 上,ServiceStack 根据他们的网站做了 3.5+。 :(
    • 没问题。我不提了。我的错! ;)
    猜你喜欢
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2018-12-31
    相关资源
    最近更新 更多