Question

I have this:

public Int32 NumberOfLocationsForCompany(int companyId)
{
        var response = _curl.ResetRequest()
            .WithPath(LOCATION_URL)
            .AddParam("companyId", companyId.ToString())
            .RequestAsGet()
            .ProcessRequest<Int32>();

        return response;
}

that calls this at the end.

    public T ProcessRequest<T>() where T : new()
    {
        var response = _client.Execute<T>(_request);

        if (response.ErrorException != null)
        {
            throw response.ErrorException;
        }
        return response.Data;
    }

but I get this error. I don't get why it's trying to map an int to a collection or why it's Int64 vs the 32 I specified.: Unable to cast object of type 'System.Int64' to type 'System.Collections.Generic.IDictionary`2[System.String,System.Object]'.

When I hit the api directly this is what I get back

<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">17</int>

I feel it's something I'm not understanding about Rest Sharp. I tell the execute method to expect an Int, it receives and int, but is trying to map it to a collection. Why and where does the collection come from?

I have noticed that when I look into the base response object's Content the appropriate result "17" is present, why can't Rest Sharp find it? and still where is it finding the Collection?

Was it helpful?

Solution

When looking at the response object I found the return value was in Content vs in Data. I found this to be true whenever I was not returning an object or list of objects.

So now when I'm expecting an int, string, bool, etc I use the following and cast the type of the return value:

    public string ProcessRequestWithValue()
    {
        var response = _client.Execute(_request);

        if (response.ErrorException != null)
        {
            throw response.ErrorException;
        }

        return response.Content;
    }

Hope this helps!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top