当前位置: 首页 > 面试题库 >

带有自定义JsonConverter的.net HttpClient

西门靖琪
2023-03-14
问题内容

我正在使用.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