我的JSON有点弱,所以我需要一些帮助。
我正在尝试反序列化用户的JSON:
{"user":{ "user_id": 1, "user_type": "moderator", "creation_date": 1217514151, "display_name": "Jeff Atwood", ... "accept_rate": 100 }}
放入我用JsonProperty属性装饰的对象中:
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对象?
提前致谢!
正如Alexandre Jasmin在您的问题的评论中所说的那样,生成的JSON在User您要反序列化的实际对象周围有一个包装。
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); }
该包装器上将有将来的元数据属性,例如响应时间戳,因此使用它不是一个坏主意!