当我将我的对象发布到另一个API时
HttpClient.PostAsJsonAsync(uri, content)我的内容用丢失的属性发送。
我的内容类型是字典< string,object >
"limit": 10,
"offset": 0,
"sort": null,
"order": null当我发布这个对象时,它就消失了
"limit": 10,
"offset": 0,是否可以使用PostAsJson方法发布空属性?
发布于 2019-03-21 08:16:28
PostAsJsonAsync只是用一个JsonMediaTypeFormatter调用PostAsync。该格式化程序(或者更多的是它的基类BaseJsonMediaTypeFormatter )创建了一个来自Json.Net的IContractResolver,并控制成员是否和如何被序列化为json。它从IRequiredMemberSelector调用JsonMediaTypeFormatter来查看成员是否应该被序列化,即使它是空的。
我认为最好的方法是用Json.Net序列化字典,然后使用HttpClient发送字符串。就像这样:
var json = JsonConvert.SerializeObject(content);
HttpCLient.PostAsync(uri, new StringContent(json, Encoding.UTF8, "application/json"));发布于 2019-03-21 11:53:21
HttpClient没有PostAsJsonAsync方法。这是由一种扩展方法包添加的Microsoft.AspNet.WebApi.Client。它没有做任何特别困难的事情,它使用Json.NET将content对象序列化为JSON。您也可以使用几行代码进行相同的操作:
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属性:
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值的字典项
https://stackoverflow.com/questions/55276010
复制相似问题