2015-04-06 152 views
1

如何反序列化c#中的json对象数组?这里是我的JSON:使用json对象反序列化json对象数组

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

我有这样的代码来获取用户名:

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

我怎样才能获得用户信息的价值?我想要在用户信息对象内的在线值。

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

我认为这将有助于你反序列化