反序列化包含 json 对象的 json 对象数组

3
我该如何在C#中反序列化JSON对象数组?这是我的JSON数据:
[{"id":"255521115", "user":"username","userinfo":{"id":"158","online":"false"}}]

我有这段代码可以获取用户名:
 [JsonProperty("user")]
 public string Username { get; set; }

我该如何获取userinfo对象中的值?我需要在线上获取userinfo对象中的值。


你要么在贴帖子时剪切了一些闭合括号,要么你的JSON格式不正确。 - Ňɏssa Pøngjǣrdenlarp
我删掉了闭合括号,谢谢提醒 :) - Matthew
仍然无效;可能应该是 [{"id": "255521115","user": "username","userinfo": {"id": "158", "online": "false"}}] - Ňɏssa Pøngjǣrdenlarp
2个回答

7

在VS2013中有一个很酷的功能。如果你将JSON复制到剪贴板中,然后在Visual Studio中点击编辑 -> 特殊粘贴 -> 粘贴为类,它会为你生成类结构。你只需要重新命名一些属性就可以了。在你的情况下,修改后的类版本将是:

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

我之前不知道那个 Visual Studio 的技巧。真是省了不少时间,非常感谢! - wbt11a
这个技巧在VS 2022上也适用。节省时间。 - Alexander

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

我认为这会帮助你进行反序列化


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接