2017-10-06 69 views
1

我试图用Newtonsoft.JSON包解析JSON。如何使用newtonsoft.json嵌套

string jsonData = 
"{\"name\":\"olga\",\"tokenmode\":\"bearer\",\"expires\":9483,\"refresh\":\"{\\\"Id\\\":\\\"alla-ieih-8493j-2455d\\\",\\\"Id\\\":\\\"94094-3838485-kdooj4u\\\"}\",\"status\":\"10\",\"namestatus\":\"5\"}"; 


dynamic aa = JsonConvert.DeserializeObject(jsonData); 

var name = aa.name.tostring(); //Outputs olga 

var id = aa.refresh.Id.ToString(); //Gives error 

问题是我如何访问Id数据?

+1

是'refresh'supposed是一个内嵌的JSON?如果是的话,这是不正确的,你可以更具体地得到Id,你会得到最后一个Id。因为'Id'是一个重复的密钥。 – PinBack

回答

4

你必须添加一个

dynamic refresh = JsonConvert.DeserializeObject(aa.refresh.ToString()); 
+0

它不需要动态 –

0

你必须这样做:

var id = aa.refresh[0].Id.ToString(); 
+0

我之前测试过,它抛出{“无法访问Newtonsoft.Json.Linq.JValue上的子值”。} –

1

创建一个类:

class Player 
{ 
    public Guid ID { get; set; } 
    public string Name { get; set; } 
    public TimeSpan Elapsed { get; set; } 

    [JsonConstructor] 
    public Player(Guid id, string name, TimeSpan elapsed) 
    { 
     this.ID = id; 
     this.Name = name; 
     this.Elapsed = elapsed; 
    } 
    public Player(string name, TimeSpan elapsed) 
    { 
     this.ID = Guid.NewGuid(); 
     this.Name = name; 
     this.Elapsed = elapsed; 
    } 
} 

询问对象:

Player player = JsonConvert.DeserializeObject<Player>(jsonstring); 

询问对象列表:

List<Player> players = JsonConvert.DeserializeObject<List<Player>>(jsonstring);