2015-04-06 2 views
1

Как я могу десериализовать массив json-объектов в C#? Вот мой JSON:Deserialize массив объектов json с объектом json внутри

[{"id":"255521115", "user":"username","userinfo":{"id":"158","online":"false"}}] 

У меня есть этот код, чтобы получить имя пользователя:

[JsonProperty("user")] 
public string Username { get; set; } 

Как я могу получить значения UserInfo? Я хочу, чтобы значение онлайн находилось внутри объекта userinfo.

+0

вы либо обрежутся некоторые закрывающие скобки, чтобы опубликовать или ваш JSON не является действительным – Plutonix

+0

я обрезанным закрывающий кронштейн, спасибо за уведомление :) – Matthew

+0

Еще не действителен; вероятно, должно быть '[{" id ":" 255521115 "," user ":" username "," userinfo ": {" id ":" 158 "," online ":" false "}}]' – Plutonix

ответ

4

Существует одна интересная особенность в VS2013. Если вы скопируете JSON в буфер обмена и в Visual Studio щелкните EDIT -> Paste Special -> Paste JSON as Classes, он будет генерировать структуру классов для вас. Все что вам нужно - переименовать некоторые свойства, если хотите. В вашем случае модифицированной версии классов будет:

public class Obj 
{ 
    public string Id { get; set; } 

    [JsonProperty("User")] 
    public string UserName { get; set; } 

    public Userinfo Userinfo { get; set; } 
} 

public class Userinfo 
{ 
    public string Id { get; set; } 
    public string Online { get; set; } 
} 

И тогда вы можете легко десериализации вашей JSON строки:

var json = @"[{""id"":""255521115"", ""user"":""username"",""userinfo"":{""id"":""158"",""online"":""false""}}]"; 
var objs = JsonConvert.DeserializeObject<IList<Obj>>(json); 
+0

Работает: D Спасибо. – Matthew

+0

Я понятия не имел об этом трюке Visual Studio. Отличная экономия времени. Спасибо! – wbt11a

0
public class classname 
{ 
    //Create property to hold value 
    public string Username { get; set; } 
} 

Теперь десериализации будет работать:

using (var sr = new StringReader(json)) 
using (var jr = new JsonTextReader(sr)) 
{ 
    var js = new JsonSerializer(); 
    var u = js.Deserialize<classname>(jr); 
    Console.WriteLine(u.Username); 
} 

я думаю, что это поможет вам десериализации

Смежные вопросы