как получить доступ к вложенному объекту в строке JSON

Я получаю ответ API в формате JSON следующим образом:

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

dynamic usrdetail = JsonConvert.DeserializeObject(JSONString);

Я могу использовать usrdetail для доступа token_type и access_token (usrdetail.access_token), но как мне добраться до информации пользователя?

Я пробовал usrdetail.user.id, но это не работает?

Спасибо G

Всего 4 ответа


Объекты JSON записываются в парах ключ / значение. Поэтому для доступа к объектам JSON вы можете использовать квадратные скобки и поместить в него ключ.

Итак, для вашего примера вы можете сделать usrdetail["user"]["id"] который должен получить идентификатор пользователя.


1) Создайте быстрый тип для json-строки из json2csharp

public class User
{
    public int id { get; set; }
    public string username { get; set; }
    public int resource { get; set; }
    public string firstname { get; set; }
}

public class Token
{
    public string token_type { get; set; }
    public string access_token { get; set; }
    public User user { get; set; }
}

2) Затем Deserialize ваш json в выше быстрый тип, как

class Program
{
    static void Main(string[] args)
    {
        string json = @"{ 'token_type':'Bearer','access_token':�','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();
    }
}

Выход:

введите описание изображения здесь


Это должно сработать.

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);

Смотрите это: https://dotnetfiddle.net/huKNpU


вы можете сериализовать динамический объект dynamic usrdetail а затем десериализовать его на предопределенный объект, как dynamic usrdetail ниже:

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

Есть идеи?

10000