2013-04-01 2 views
5

Когда я делаю запрос в RestSharp как так:Почему RestSharp выдает ошибку при десериализации булевского ответа?

var response = client.Execute<bool>(request); 

Я получаю следующее сообщение об ошибке:

"Unable to cast object of type 'System.Boolean' to type 'System.Collections.Generic.IDictionary`2[System.String,System.Object]'." 

Это ответ полный HTTP, в Fiddler:

HTTP/1.1 200 OK 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Server: Microsoft-IIS/7.5 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Mon, 01 Apr 2013 15:09:14 GMT 
Content-Length: 5 

false 

Он появляется что все кошернее с ответом, так что дает?

Кроме того, если я делаю что-то глупо с моим контроллером WebAPI, возвращая простое значение вместо объекта, и это устранит мою проблему, не стесняйтесь предлагать.

ответ

9

RestSharp будет только десериализовать действительный json. false недействителен json (согласно RFC-4627). Сервер должен вернуть что-то вроде следующих по крайней мере:

{ "foo": false } 

И вам нужен класс, как следование десериализации в:

public class BooleanResponse 
{ 
    public bool Foo { get; set; } 
} 
+0

Oh. Правильно. В этом есть смысл. Виноват. –

+1

FYI, это именно то, что вы должны вернуть «Json (true)» из RemoteValidationAttribute. Удивленный тем, что MSFT возвращает нам недействительный JSON в своем собственном примере. См. Http://msdn.microsoft.com/en-us/library/gg508808(v=vs.98).aspx –

+0

WOOOOOOW, это отстой –