首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpClient - PostAsJson不发送空属性

HttpClient - PostAsJson不发送空属性
EN

Stack Overflow用户
提问于 2019-03-21 08:04:31
回答 2查看 1.6K关注 0票数 0

当我将我的对象发布到另一个API时

代码语言:javascript
复制
HttpClient.PostAsJsonAsync(uri, content)

我的内容用丢失的属性发送。

我的内容类型是字典< string,object >

代码语言:javascript
复制
"limit": 10, 
"offset": 0,
"sort": null,
"order": null

当我发布这个对象时,它就消失了

代码语言:javascript
复制
"limit": 10, 
"offset": 0,

是否可以使用PostAsJson方法发布空属性?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-21 08:16:28

PostAsJsonAsync只是用一个JsonMediaTypeFormatter调用PostAsync。该格式化程序(或者更多的是它的基类BaseJsonMediaTypeFormatter )创建了一个来自Json.Net的IContractResolver,并控制成员是否和如何被序列化为json。它从IRequiredMemberSelector调用JsonMediaTypeFormatter来查看成员是否应该被序列化,即使它是空的

我认为最好的方法是用Json.Net序列化字典,然后使用HttpClient发送字符串。就像这样:

代码语言:javascript
复制
var json = JsonConvert.SerializeObject(content);
HttpCLient.PostAsync(uri, new StringContent(json, Encoding.UTF8, "application/json"));
票数 2
EN

Stack Overflow用户

发布于 2019-03-21 11:53:21

HttpClient没有PostAsJsonAsync方法。这是由一种扩展方法包添加的Microsoft.AspNet.WebApi.Client。它没有做任何特别困难的事情,它使用Json.NET将content对象序列化为JSON。您也可以使用几行代码进行相同的操作:

代码语言:javascript
复制
var json = JsonConvert.SerializeObject(someObject);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var result = await client.PostAsync(url, content);

默认情况下,Json.Net会序列化空属性。它将序列化字典中的所有项,即使该项的值为null

可以使用NullValueHandling属性忽略null属性:

代码语言:javascript
复制
var settings=new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
var json = JsonConvert.SerializeObject(someObject,settings);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var result = await client.PostAsync(url, content);

这不会影响字典。在序列化之前,您必须筛选出包含null值的字典项

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55276010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档