Rest Sharp Execute‹Int› завершается сбоем из-за исключения приведения

У меня есть это:

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

        return response;
}

который вызывает это в конце.

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

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

но я получаю эту ошибку. Я не понимаю, почему он пытается сопоставить целое число с коллекцией или почему это Int64, а не 32, которые я указал.: Невозможно привести объект типа «System.Int64» к типу «System.Collections.Generic.IDictionary». `2[System.String,System.Object]'.

Когда я нажимаю API напрямую, это то, что я получаю

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

Я чувствую, что чего-то не понимаю в Rest Sharp. Я говорю методу выполнения ожидать Int, он получает и int, но пытается сопоставить его с коллекцией. Почему и откуда взялась коллекция?

Я заметил, что когда я просматриваю содержимое объекта базового ответа, присутствует соответствующий результат «17», почему Rest Sharp не может его найти? и еще где найти Сборник?


person SummaNerd    schedule 01.10.2012    source источник
comment
ФИКСИРОВАННЫЙ. Я только что создал еще один метод, который возвращает содержимое. Я буду использовать его, когда не ожидаю Объектов. Надеюсь, это правильный способ справиться с этим.   -  person SummaNerd    schedule 01.10.2012
comment
Вы можете ответить себе, если вы исправили это самостоятельно, чтобы другие могли увидеть, как вы это сделали позже.   -  person Darkwater    schedule 03.10.2012


Ответы (1)


При просмотре объекта ответа я обнаружил, что возвращаемое значение было в содержании, а не в данных. Я обнаружил, что это верно всякий раз, когда я не возвращал объект или список объектов.

Итак, теперь, когда я ожидаю int, string, bool и т. д., я использую следующее и привожу тип возвращаемого значения:

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

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

        return response.Content;
    }

Надеюсь это поможет!

person SummaNerd    schedule 08.10.2012
comment
Это, похоже, не решает реальной проблемы. Это скорее (болезненный) обходной путь. Когда API совместно используется другими клиентами (чье сообщение ожидает возврата int, а не объекта, это становится проблемой для определения различных контроллеров/действий. - person Serge P; 03.03.2015
comment
К сожалению, я не могу здесь помочь, у меня больше нет доступа к этому коду, и с тех пор я не использовал Rest Sharp. Я использую NodeJS для всех API. @SergeP - person SummaNerd; 05.03.2015