.net c# json serialization

Deserializing JSON into an object with Json.NET

I’m playing a little bit with the new StackOverflow API. Unfortunately, my JSON is a bit weak, so I need some help.

I’m trying to deserialize this JSON of a User:

"user_id": 1,
"user_type": "moderator",
"creation_date": 1217514151,
"display_name": "Jeff Atwood",
"accept_rate": 100

into an object which I’ve decorated with JsonProperty attributes:

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

I get the following exception:

Required property ‘user_id’ not found
in JSON.

Is this because the JSON object is an array? If so, how can I deserialize it to the one User object?

Thanks in advance!

As Alexandre Jasmin said in the comments of your question, the resulting JSON has a wrapper around the actual User object you’re trying to deserialize.

A work-around would be having said wrapper class:

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

Then the deserialization will work:

using (var sr = new StringReader(json))
using (var jr = new JsonTextReader(sr))
var js = new JsonSerializer();
var u = js.Deserialize<UserResults>(jr);

There will be future metadata properties on this wrapper, e.g. response timestamp, so it’s not a bad idea to use it!