我刚刚在winforms app中找到的东西
我的应用程序对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;
没什么特别的,但只要你通过nuget安装Newtonsoft.Json(V6.0.3)
突然我在HttpResponseMessage代码行上遇到stackOverflow错误。 删除Newtonsoft,问题解决了。
问题是我是使用库来序列化/反序列化我表单中其他地方的数据
我的解决方法是使用不同的库,我只是使用System.Runtime.Serialization.Json;但这仍然很奇怪,不是吗?
我还应该补充一点,这是dotnet v4.0(不是4.5),我的应用程序是在MsWord中作为Add On
运行的VSTO COM对象我怀疑牛顿软件中可能存在错误
答案 0 :(得分:3)
安装" microsoft asp.net web api 2.2客户端库"从nuget和don手动引用system.net.http.dll和system.net.http.formatting.dll。如果您安装此软件包,那么将安装正确的json.net
答案 1 :(得分:0)
我在更新到更新版本的Newtonsoft.Json软件包后收到错误。
卸载Microsoft.AspNet.WebApi.Client nugget包并在升级到较新的Newtonsoft.Json包后重新安装它解决了我的问题。
答案 2 :(得分:0)
如果只需要PostAsJsonAsync
方法,最好编写自己的扩展方法。
我建议删除对Microsoft.AspNet.WebApi.Client
的引用(当我从该程序包中使用PostAsJsonAsync时,它抱怨它找不到较旧的Newtonsoft.Json版本,但问题是我需要最新版本。我的项目无论如何都以.net Framework 4.7.2为目标...
这是您可以复制和粘贴的代码。
我使用了完全限定的名称,因此您不必担心添加using
语句。
我还在使用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