2016-12-04 54 views
0

我有一个JSON这样,不得不反序列化:C#反序列化JSON根密钥未知

{ 
    "0": { 
    "foo_id":"xyz", 
    "bar_id":"abc", 
    "book": { 
     "0": { 
     "title":"hello", 
     "author":"person_x" 
     }, 
     "1": { 
     "title":"hi", 
     "author":"person_y" 
     } 
    }, 
    "1": { 
    "foo_id":"xyz", 
    "bar_id":"abc", 
    "book": { 
     "0": { 
     "title":"hello", 
     "author":"person_a" 
     }, 
     "1": { 
     "title":"bye", 
     "author":"person_b" 
     } 
    }, 
    "random":"string", 
    "other":"thing" 
} 

类似this问题,但给出的答案是不行的,因为我不拥有的奢侈品创造这样的

public class RootObject 
{ 
    public Dictionary<string, Object> Objects {get; set;} 
} 

一类的。如果我不是对象领域做的是反序列化后空。

根对象和书籍对象都是动态的。

任何其他方法,将不胜感激,在此先感谢。

回答

1

因为你有JSON不包含RootObject持有一个字典,你可以直接反序列化到Dictionary像这样:

类:

public class Item 
{ 
    [JsonProperty("foo_id")] 
    public string FooId { get; set; } 

    [JsonProperty("bar_id")] 
    public string BarId { get; set; } 
} 

反序列化:

var result = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json); 

结果:

result


更新:

既然你已经在你的问题改变了原有的JSON,第二给定JSON可以反序列化这样:

类别:

public class RootObject 
{ 
    [JsonExtensionData] 
    public Dictionary<string, JToken> Items { get; set; } 

    [JsonProperty("random")] 
    public string Random { get; set; } 

    [JsonProperty("other")] 
    public string Other { get; set; } 
} 

反序列化:

var result = JsonConvert.DeserializeObject<RootObject>(json); 
+0

我仍然有一个RootObject类,这是一个我想反序列化,因为它有一些其他的数据,我需要。谢谢 – qwerty123

+0

@ querty123重要的是要知道完整的JSON响应的整个结构,以反序列化 – Jim

+0

任何想法如何设置这个JSON,谢谢 – qwerty123