我正在使用Refit调用REST服务,并希望将作为动态类型返回的JSON反序列化。
我尝试将接口定义为
[Get("/foo")]
Task<dynamic> GetFoo();
但呼叫超时。
我知道我可以反序列化为这样的动态
var mockString = "{ title: { name: 'fred', book: 'job'} }";
dynamic d = JsonConvert.DeserializeObject(mockString);
但我不知道该传递什么给Refit让它做同样的事情。
另一种选择是让Refit将原始JSON传递回来,这样我就可以自己反序列化它,但我也看不到这样做的方法。
有什么想法吗?
2条答案
按热度按时间x33g5p2x1#
您可以定义接口返回字符串并以这种方式获取原始JSON:
如下所述:https://github.com/paulcbetts/refit#retrieving-the-response
tktrz96b2#
Refit在底层使用JSON .NET,所以任何使用它的反序列化都可以使用Refit,包括
dynamic
。下面是一个真实的的例子:
如果您使用的是iOS和Refit 4+,您可能会看到此错误:https://github.com/paulcbetts/refit/issues/359
正如Steven Thewissen所说,您可以使用
Task<string>
作为返回类型(或Task<HttpResponseMessage>
,甚至Task<HttpContent>
)来接收原始响应并反序列化自己,但您不应该必须这样做--Refit的全部意义在于它应该为您省去这个麻烦。[更新日期:2023年2月]
Refit现在默认使用
System.Text.Json
(参见下面的注解),但是这里的方法应该仍然有效。