2016-09-02 3 views
2

У меня есть проблема с десериализации JSONC#: Deserialize JSON

Это мой JSON файл

{ 
    "api_result": 1, 
    "api_result_msg": "OK", 
    "api_data": { 
    "api_basic": { 
     "api_nickname": "David", 
    }, 
    "api_p_bgm_id": 112, 
    "api_parallel_quest_count": 5 
    } 
} 

Класс соответствия (генерируется специальной пастой в визуальной студии):

public class Rootobject 
{ 
    public int api_result { get; set; } 
    public string api_result_msg { get; set; } 
    public Api_Data api_data { get; set; } 
} 

public class Api_Data 
{ 
    public Api_Basic api_basic { get; set; } 
    public int api_p_bgm_id { get; set; } 
    public int api_parallel_quest_count { get; set; } 
} 

public class Api_Basic 
{ 
    public string api_nickname { get; set; } 
} 

И мой код:

string JJ = "{\"api_result\":1,\"api_result_msg\":\"OK\",\"api_data\":{\"api_basic\":{\"api_nickname\":\"David\"},\"api_p_bgm_id\":112,\"api_parallel_quest_count\":5}}"; 
    Rootobject result = JsonConvert.DeserializeObject<Rootobject>(JJ); 
    Api_Basic nickname = JsonConvert.DeserializeObject<Api_Basic>(JJ); 

    Console.WriteLine("result:" + result.api_result_msg); 
    Console.WriteLine("nickname:" + nickname.api_nickname); 

Выход:

result:OK <---success 
nickname: <---fail 

Я пробовал:

Rootobject nickname = JsonConvert.DeserializeObject<Rootobject>(JJ); 
Console.WriteLine(nickname.api_basic.api_nickname); 

Но это не работает.

Что я делаю неправильно?

+1

В вашем втором образце он должен быть 'nickname.api_data.api_basic.api_nickname' –

+0

Ваш JSON не является действительным. Удалите запятую после '" api_nickname ":" David "' –

+0

Что вы подразумеваете под * не работает *? Выбрасывает ли это исключение во время выполнения? Разве это не компилируется? Пожалуйста, будьте более ясными и конкретными –

ответ

2

Зачем выполнять десерилизацию два раза?

Вам нужно только первый объект:

string JJ = "{\"api_result\":1,\"api_result_msg\":\"OK\",\"api_data\":{\"api_basic\":{\"api_nickname\":\"David\"},\"api_p_bgm_id\":112,\"api_parallel_quest_count\":5}}"; 
Rootobject result = JsonConvert.DeserializeObject<Rootobject>(JJ); 

Console.WriteLine("result:" + result.api_result_msg); 
Console.WriteLine("nickname:" + result.api_data.api_basic.api_nickname);