我正在使用.NET的HttpClient向WebAPI发出请求,该WebAPI返回一些JSON数据,该数据需要在客户端进行一些自定义反序列化。为此,我已经完成了自己的工作JsonConverter
,但是我不知道如何让该ReadAsAsync<T>
方法处理转换器的存在。
通过使用ReadAsStringAsync
读取响应,然后将该字符串传递给JsonConvert.DeserializeObject
,我已经解决了我的问题,但是似乎应该有一个更优雅的解决方案。
这是我的代码:
public PrefsResponse GetAllPrefs(string sid) {
HttpClient client = CreateHttpClient(null, sid);
var response = client.GetAsync("api/sites/" + sid).Result;
// TODO : find a way to hook custom converters to this...
// return response.Content.ReadAsAsync<PrefsResponse>().Result;
var stringResult = response.Content.ReadAsStringAsync().Result;
return JsonConvert.DeserializeObject<PrefsResponse>(stringResult, new PrefClassJsonConverter());
}
这是我所能做到的最好的,还是有一些更优雅的方法?
如果需要连接,我也在这里创建HttpClient:
private HttpClient CreateHttpClient(CommandContext ctx, string sid) {
var cookies = new CookieContainer();
var handler = new HttpClientHandler {
CookieContainer = cookies,
UseCookies = true,
UseDefaultCredentials = false
};
// Add identity cookies:
if (ctx != null && !ctx.UserExecuting.IsAnonymous) {
string userName = String.Format("{0} ({1})", ctx.RequestingUser.UserName, ctx.UserExecuting.Key);
cookies.Add(new Cookie(__userIdCookieName, userName));
cookies.Add(new Cookie(__sidCookieName, sid));
cookies.Add(new Cookie(__hashCookieName,
GenerateHash(userName, Prefs.Instance.UrlPrefs.SharedSecret)));
}
var client = new HttpClient(handler) {
BaseAddress = _prefServerBaseUrl
};
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
return client;
}
您可以将JsonSerializerSettings
转换器列表与一起传递给,供JsonMediaTypeFormatter
以下人员使用ReadAsAsync<T>
:
即
var obj = await result.Content.ReadAsAsync<refsResponse>(
new[] {new JsonMediaTypeFormatter {
SerializerSettings = new JsonSerializerSettings {
Converters = new List<JsonConverter> {
//list of your converters
}
}
}
});
问题内容: 我想使用Newtonsoft的IsoDateTimeConverter来格式化我的DateTime属性的json版本。 但是,我无法弄清楚在Nest 2.x中是如何完成的。 这是我的代码: 我收到此异常: 任何帮助表示赞赏 问题答案: 使用,您需要检查类型是否是您要注册的转换器的正确类型;如果是,则返回转换器实例,否则返回 默认情况下,NEST 对这些类型使用,因此除非您要更改转换器上
我尝试开发一个小android应用程序,并显示一个对话框警报,其中只包含一个edittext,以填充自定义内容作为下一个链接 创建自定义布局我有这个代码,但它不工作 } 但是代码循环运行 我不明白 在我班上的主要活动 我有这个密码 这是我的风格。xml 我的logcat是下一个 谢谢你的帮助,
问题内容: 我有一个来自客户端的对象,并自动从Web Api 2反序列化。 现在,我对模型的一个属性有疑问。此属性“ CurrentField”的类型为IField,此接口有2种不同的实现。 这是我的模型(只是一个假人) 我试图创建一个自定义的JsonConverter来查找来自客户端的对象是什么类型(Field1或Field2),但是我只是不知道如何。 我的Converter被调用,当我调用va
我们正在使用spring和Spring-Security-3.2。最近,我们向RESTAPI添加了注释@preauthorize(以前是基于URL的)。 我们已经有了用-@ControllerAdvice和自定义的PermissionEvaluator注释的全局异常处理程序,除了错误消息之外,其他一切都正常工作。 是否可能抛出一个包含权限名称的异常,所以最终的错误消息应该是“Access Is d
我尝试用自定义控制器制作一个自定义组件。自定义组件已经显示在应用程序上,但我未能向其添加属性。 项目结构: null 布尔马尔科 完全错误: 原因:java.lang.nullPointerException:无法调用“javafx.scene.image.imageeview.setimage(javafx.scene.image.image)”,因为“controller.topbarbtn.
问题内容: 当我需要定制我的UIPageControl解决方案。 为新版本的swift稍微修改一下即可: 我的问题是,当您第一次启动应用程序时,我无法更改图片。仅在页面更改时更改。 在中,我添加了和,但没有结果。我可能做错了什么? 问题答案: Swift 3.0 …您知道是否可以接受声明的风险:“修改现有控件的子视图很脆弱”。 您将必须在viewDidAppear()中调用“ updateDots