C# 如何访问JSON字符串中的嵌套对象

C# 如何访问JSON字符串中的嵌套对象,c#,json,json.net,C#,Json,Json.net,我得到一个JSON格式的API响应,如下所示: { "token_type":"Bearer", "access_token":"12345678910", "user":{ "id":123456, "username":"jbloggs", "resource":2, "firstname":"joe" } } dynamic usrdetail = JsonConve

我得到一个JSON格式的API响应,如下所示:

{ 
  "token_type":"Bearer",
  "access_token":"12345678910",
  "user":{ 
           "id":123456,
           "username":"jbloggs",
           "resource":2,
           "firstname":"joe"
         }
}

dynamic usrdetail = JsonConvert.DeserializeObject(JSONString);
我可以使用usrdetail访问令牌类型和访问令牌(usrdetail.access\u token),但如何获取用户信息

我已经尝试过usrdetail.user.id,但不起作用

谢谢
G

JSON对象以键/值对的形式编写。因此,要访问JSON对象,可以使用方括号并将键放在其中


因此,对于您的示例,您可以执行
usrdetail[“user”][“id”]
,它应该检索用户的id。

JSON对象是以键/值对编写的。因此,要访问JSON对象,可以使用方括号并将键放在其中

因此,对于您的示例,您可以执行
usrdetail[“user”][“id”]
,它应该检索用户的id。

1)从

2) 然后将json反序列化为上面的快速类型,如

class Program
{
    static void Main(string[] args)
    {
        string json = @"{ 'token_type':'Bearer','access_token':'12345678910','user':{ 
                                       'id':123456,'username':'jbloggs','resource':2,'firstname':'joe'}
                                     }";


        Token token = JsonConvert.DeserializeObject<Token>(json);

        Console.WriteLine("token_type: " + token.token_type);
        Console.WriteLine("access_token: " + token.access_token);
        Console.WriteLine();
        Console.WriteLine("id: " + token.user.id);
        Console.WriteLine("username: " + token.user.username);
        Console.WriteLine("resource: " + token.user.resource);
        Console.WriteLine("firstname: " + token.user.firstname);

        Console.ReadLine();
    }
}
类程序
{
静态void Main(字符串[]参数)
{
字符串json=@“{'token_type':'Bearer','access_token':'12345678910','user':{
'id':123456,'username':'jbloggs','resource':2,'firstname':'joe'}
}";
Token Token=JsonConvert.DeserializeObject(json);
Console.WriteLine(“token\u type:+token.token\u type”);
Console.WriteLine(“访问令牌:+token.access\u令牌”);
Console.WriteLine();
Console.WriteLine(“id:+token.user.id”);
Console.WriteLine(“用户名:”+token.user.username);
Console.WriteLine(“资源:”+token.user.resource);
Console.WriteLine(“firstname:+token.user.firstname”);
Console.ReadLine();
}
}
输出:

1)从创建json字符串的快速类型

2) 然后将json反序列化为上面的快速类型,如

class Program
{
    static void Main(string[] args)
    {
        string json = @"{ 'token_type':'Bearer','access_token':'12345678910','user':{ 
                                       'id':123456,'username':'jbloggs','resource':2,'firstname':'joe'}
                                     }";


        Token token = JsonConvert.DeserializeObject<Token>(json);

        Console.WriteLine("token_type: " + token.token_type);
        Console.WriteLine("access_token: " + token.access_token);
        Console.WriteLine();
        Console.WriteLine("id: " + token.user.id);
        Console.WriteLine("username: " + token.user.username);
        Console.WriteLine("resource: " + token.user.resource);
        Console.WriteLine("firstname: " + token.user.firstname);

        Console.ReadLine();
    }
}
类程序
{
静态void Main(字符串[]参数)
{
字符串json=@“{'token_type':'Bearer','access_token':'12345678910','user':{
'id':123456,'username':'jbloggs','resource':2,'firstname':'joe'}
}";
Token Token=JsonConvert.DeserializeObject(json);
Console.WriteLine(“token\u type:+token.token\u type”);
Console.WriteLine(“访问令牌:+token.access\u令牌”);
Console.WriteLine();
Console.WriteLine(“id:+token.user.id”);
Console.WriteLine(“用户名:”+token.user.username);
Console.WriteLine(“资源:”+token.user.resource);
Console.WriteLine(“firstname:+token.user.firstname”);
Console.ReadLine();
}
}
输出:

这应该行得通

var jsonStr = "{ \"token_type\":\"Bearer\",\"access_token\":\"12345678910\",\"user\":{\"id\":123456,\"username\":\"jbloggs\",\"resource\":2,\"firstname\":\"joe\"}}";
dynamic jsonObject = JsonConvert.DeserializeObject(jsonStr);
int userId = jsonObject.user.id;
Console.WriteLine(userId);
见此:

这应该可以

var jsonStr = "{ \"token_type\":\"Bearer\",\"access_token\":\"12345678910\",\"user\":{\"id\":123456,\"username\":\"jbloggs\",\"resource\":2,\"firstname\":\"joe\"}}";
dynamic jsonObject = JsonConvert.DeserializeObject(jsonStr);
int userId = jsonObject.user.id;
Console.WriteLine(userId);

请参见:

您可以序列化动态对象
动态usrdetail
,然后将其反序列化为预定义对象,如下所示:

 dynamic usrdetail = JsonConvert.DeserializeObject(JSONString);
 var jsonParam = JsonConvert.SerializeObject(usrdetail);
 PredefiendClass obj = JsonConvert.DeserializeObject<PredefiendClass>(jsonParam);
dynamic usrdetail=JsonConvert.DeserializeObject(JSONString);
var jsonParam=JsonConvert.SerializeObject(usrdetail);
PredefindClass obj=JsonConvert.DeserializeObject(jsonParam);

您可以序列化动态对象
动态usrdetail
,然后将其反序列化为预定义对象,如下所示:

 dynamic usrdetail = JsonConvert.DeserializeObject(JSONString);
 var jsonParam = JsonConvert.SerializeObject(usrdetail);
 PredefiendClass obj = JsonConvert.DeserializeObject<PredefiendClass>(jsonParam);
dynamic usrdetail=JsonConvert.DeserializeObject(JSONString);
var jsonParam=JsonConvert.SerializeObject(usrdetail);
PredefindClass obj=JsonConvert.DeserializeObject(jsonParam);

这是一个很好的“快速和肮脏”的解决方案,但是考虑到一旦你用数据完成了你的目标,就可以像ErSuaib的答案那样进行重构,这是一个很好的“快速和肮脏”的解决方案,但是考虑到一旦你用数据完成了你的目标,就可以将重构看作是一个更可持续的东西,比如ErSuaib的答案。