【问题标题】:Deserialize array of json objects with json object inside反序列化包含 json 对象的 json 对象数组
【发布时间】:2015-06-11 00:07:06
【问题描述】:

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

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

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

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

如何获取用户信息的值?我想要 userinfo 对象内的在线值。

【问题讨论】:

  • 你要么剪掉了一些右括号来发布,要么你的 JSON 无效
  • 我剪掉了右括号,感谢您的通知 :)
  • 仍然无效;可能应该是[{"id": "255521115","user": "username","userinfo": {"id": "158", "online": "false"}}]

标签: c# arrays json serialization


【解决方案1】:
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 );
}

我认为这将帮助您反序列化

【讨论】:

    【解决方案2】:

    VS2013 中有一个很酷的功能。如果您将 JSON 复制到剪贴板并在 Visual Studio 中单击EDIT -&gt; Paste Special -&gt; 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);
    

    【讨论】:

    • 我不知道这个 Visual Studio 技巧。节省时间的好方法。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多