使用JSON.NET解析递归未知的JSON结构

时间:2013-07-18 14:40:20

标签: c# json.net

我尝试用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。

1 个答案:

答案 0 :(得分:0)

我知道这个问题明确是关于JSON.NET的,但是希望你不了解真棒的ServiceStack库,我想添加一个建议,转而转向它。具体来说,ServiceStack.Text命名空间有一个much faster than JSON.NET's serializer的JSON Serializer。

此外,他们有一个JSONObject.Parse方法可以更好地处理您的用例(我相信)。看到这个堆栈溢出帖子几乎与你想要的匹配:

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