Cru*_*ler 5 c# json json.net dotnet-httpclient
我刚刚在 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;
Run Code Online (Sandbox Code Playgroud)
没什么特别的,但是一旦你通过 nuget 安装 Newtonsoft.Json (V6.0.3)
突然我在 HttpResponseMessage 代码行上收到 stackOverflow 错误。删除Newtonsoft,问题就解决了。
问题是我要使用该库在表单中的其他位置序列化/反序列化数据
我的解决方法是使用不同的库,我只是使用 System.Runtime.Serialization.Json;但这仍然很奇怪,不是吗?
我还应该补充一点,这是 dotnet v4.0(不是 4.5),我的应用程序是一个在 MsWord 中作为附加组件运行的 VSTO COM 对象
我怀疑 Newtonsoft 可能存在错误
如果您需要的只是方法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);
}
}
Run Code Online (Sandbox Code Playgroud)
从此答案修改:/sf/answers/2836805611/
小智 3
从 nuget 安装“microsoft asp.net web api 2.2 客户端库”,不要手动引用 system.net.http.dll 和 system.net.http.formatting.dll。如果您安装此软件包,那么也会安装正确的 json.net
归档时间: |
|
查看次数: |
6370 次 |
最近记录: |