当前位置: 首页 > 知识库问答 >
问题:

HttpClient PostAsJsonAsync与Newtonsoft不兼容。Json

苏弘盛
2023-03-14

我刚在winforms应用程序中获取的内容

我的应用程序对web Api服务进行http调用,如下所示

HttpClient _client = new HttpClient();
_client.Timeout = new TimeSpan(0, 3, 0);
_client.BaseAddress = new Uri("http://Myserver/MyApp");
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response =  _client.PostAsJsonAsync("api/Addin", newObject).Result;

没什么特别的,只要你安装了Newtonsoft。通过nuget的Json(V6.0.3)

突然,我在HttpResponseMessage代码行上出现了stackOverflow错误。移除Newtonsoft,问题就解决了。

问题是我是使用库序列化/反序列化数据在其他地方在我的窗体

我的解决方法是使用另一个库,我只是使用系统。运行时。序列化。Json;但这还是很奇怪,不是吗?

我还应该补充一点,这是dotnet v4.0(不是4.5),我的应用程序是一个VSTO COM对象,在MsWord中作为一个Add On运行

我怀疑Newtonsoft中可能有一个bug

共有3个答案

梅欣然
2023-03-14

我在更新到新版本的Newtonsoft后收到错误。Json包。

正在卸载Microsoft。AspNet。WebApi。客户端nugget软件包,并在升级到较新的Newtonsoft后重新安装。Json包为我解决了这个问题。

澹台正业
2023-03-14

如果您只需要PostAsJsonAsync方法,那么最好编写自己的扩展方法。

我建议删除对Microsoft的引用。AspNet。WebApi。客户端(当我从这个包中使用PostAsJsonAsync时,它抱怨找不到较旧版本的Newtonsoft.Json,但问题是我需要最新版本。我的项目以.net framework 4.7.2为目标)总之。。。

这是您可以复制和粘贴的代码。

我使用了完全限定的名称,所以您不必担心使用语句添加

我也在使用Newtonsoft。json库来序列化对象。

public static class HttpClientExt
{
    public static async System.Threading.Tasks.Task<HttpResponseMessage> PostAsJsonAsync<T>(this HttpClient client, string requestUrl, T theObj)
    {
        var stringContent = new StringContent(
            Newtonsoft.Json.JsonConvert.SerializeObject(theObj),
            System.Text.Encoding.UTF8, "application/json");
        return await client.PostAsync(requestUrl, stringContent);
    }
}

根据此答案修改:https://stackoverflow.com/a/40525794/2205372

阎善
2023-03-14

从nuget安装“微软asp.netweb api 2.2客户端库”,不要手动引用system.net.http.dll和system.net.http.formatting.dll。如果您安装此软件包然后将安装正确的json.net以及

 类似资料:
  • 问题内容: 我正在使用来自AJAX发布请求的回调来导航到新页面,但是在Internet Explorer上不起作用。我的代码如下: 这在FF / Safari / Chrome上正常运行,但是当我在IE上对其进行测试时,它不起作用。是否有更好的方法重定向到新页面?我正在使用,因为如果我不使用回调,则数据不会加载到Chrome / Safari上,因为在请求完成之前页面只会更改。 问题答案: 是括号

  • 我有一个关于JavaAPI中Akka 2.0.1的问题。我有以下情况: 参与者A:从UI接收请求。然后它将执行以下操作。 等待来自UI的消息 发送msg到Actor B,以检索数据 成为一个演员,当从演员B那里得到答案时,处理它。 演员B: 等待演员A的消息 检索数据 调用; 这不起作用,演员甲也不会得到答案。然而,如果Actor B在系统中使用全局actorRef到Actor A,在我的情况下z

  • 问题内容: Websphere v8.5.5开箱即用地支持JPA 2.0 。 我正在尝试将WAR部署到Websphere v8.5.5应用程序服务器。我的persistence.xml指定为JPA提供程序。 我还设置了JPA属性: 如本PDF演示文稿和本IBM主题中所述 我的应用程序设置为“ Parent Last”类加载策略,并且在WEB-INF / lib目录中包含以下JAR: hiberna

  • 在IntelliJ 202.2的最后更新后,我得到错误: 插件“Lombok”不兼容(直到build 201.SNAPSHOT) 我一直在寻找这个问题,但似乎我是唯一一个有这个IntelliJ版本问题的人。

  • 我想在Gradle上的Android项目中集成以下库: 隆坡 使用AspectJ进行机器人绑定 匕首 为了将RoboBinding与AspectJ和android工具1.1结合使用。0我使用此修复程序编译了aspectj插件。 所有库都使用一些编译时注释处理。我发现Lombok与AspectJ不兼容。我注意到Robobind的注释处理器使用的是apt,而lombok只在提供的情况下工作(Dagge

  • 在我的pc上安装Java 9之后,只需运行一个示例Scala SBT项目,我就遇到了这个例外。我已经尝试了一些解决方案,但什么都没有找到。 Java9和Scala之间是否存在不兼容? Scala版本:2.12。3. Java版本:Java版本“9” IDE: IntelliJ 提前谢谢。 我试过了,但没有成功。