小编典典

使用Json.NET将JSON反序列化为对象

json

我的JSON有点弱,所以我需要一些帮助。

我正在尝试反序列化用户的JSON:

  {"user":{
    "user_id": 1,
    "user_type": "moderator",
    "creation_date": 1217514151,
    "display_name": "Jeff Atwood",
    ...
    "accept_rate": 100
  }}

放入我用JsonProperty属性装饰的对象中:

[JsonObject(MemberSerialization.OptIn)]
public class User
{
    [JsonProperty("user_id", Required = Required.Always)]        
    public virtual long UserId { get; set; }

    [JsonProperty("display_name", Required = Required.Always)]
    public virtual string Name { get; set; }

    ...
}

我得到以下异常:

Newtonsoft.Json.JsonSerializationException:在JSON中找不到必需的属性’user_id’。

这是因为JSON对象是一个数组吗?如果是这样,如何将其反序列化为一个User对象?

提前致谢!


阅读 245

收藏
2020-07-27

共1个答案

小编典典

正如Alexandre Jasmin在您的问题的评论中所说的那样,生成的JSON在User您要反序列化的实际对象周围有一个包装。

解决方法是使用所述包装器类:

public class UserResults
{
    public User user { get; set; }
}

然后反序列化将起作用:

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

该包装器上将有将来的元数据属性,例如响应时间戳,因此使用它不是一个坏主意!

2020-07-27