2013-04-01 22 views
5

Khi tôi thực hiện một yêu cầu trong RestSharp như vậy:Tại sao RestSharp ném một lỗi khi deserializing một phản ứng boolean?

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

tôi nhận được lỗi sau:

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

Đây là câu trả lời hoàn chỉnh HTTP, mỗi 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 

Nó xuất hiện rằng tất cả mọi thứ là kosher với phản ứng, vì vậy những gì cho?

Ngoài ra, nếu tôi đang làm điều gì đó ngu ngốc với Trình điều khiển WebAPI của mình bằng cách trả về một giá trị đơn giản thay vì một đối tượng và điều đó sẽ khắc phục được sự cố của tôi, vui lòng đề xuất.

Trả lời

9

RestSharp sẽ chỉ deserialise json hợp lệ. false không phải là json hợp lệ (theo RFC-4627). Các máy chủ sẽ cần phải trả lại một cái gì đó như sau tại ít nhất:

{ "foo": false } 

Và bạn sẽ cần một lớp học như để sau để deserialize tới:

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

Oh. Đúng. Điều đó có ý nghĩa. Lỗi của tôi. –

+1

FYI, đó là chính xác những gì bạn phải trả lại "Json (true)" từ một RemoteValidationAttribute. Ngạc nhiên rằng MSFT đã cho chúng tôi trả lại JSON không hợp lệ trong ví dụ của riêng họ. Xem: http://msdn.microsoft.com/en-us/library/gg508808(v=vs.98).aspx –

+0

WOOOOOOW, điều này hút –

Các vấn đề liên quan