RestSharp not deserializing JSON Object List, always Null

I had this same problem, and none of the answers above helped.

Here was my response class:

public class SomeResponse
{
    public string string1;
    public string string2;
}

The problem was human error - I forgot to include the get/set accessors. I don't often use C# and forgot the need for them.

public class SomeResponse
{
    public string string1 { get; set; }
    public string string2 { get; set; }
}

Hope this helps someone out there.


Late to the party: You would need to find the actual Content-Type of the response you were getting. The server doesn't necessarily respond with any of the content types from your request's Accept header. For Google's APIs I got a text/plain response, so this advice from the group worked for me.

public T Execute<T>(string url, RestRequest request) where T : new()
{
    var client = new RestClient();
    // tell RestSharp to decode JSON for APIs that return "Content-Type: text/plain"
    client.AddHandler("text/plain", new JsonDeserializer());
    ...

It's also tidier if it can be done in one place such as the shared Execute method above, rather than forcing the response type with OnBeforeDeserialization wherever each request is created.


Based on the @agarcian's suggestion above, I googled the error:

restsharp Data at the root level is invalid. Line 1, position 1.

and found this forum: http://groups.google.com/group/restsharp/browse_thread/thread/ff28ddd9cd3dde4b

Basically, I was wrong to assume that client.Execute was going to be able to auto-detect the return content type. It needs to be explicity set:

var request = new RestRequest(Method.GET);
request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; };

This could be cited more clearly in RestSharp's documentation. Hopefully this will help someone else out!