我通过以下方式将对象发布到另一个API上
HttpClient.PostAsJsonAsync(uri, content)
我的内容发送时缺少属性。
我的内容类型为 字典<字符串,对象>
"limit": 10,
"offset": 0,
"sort": null,
"order": null
当我发布该对象时,它消失为
"limit": 10,
"offset": 0,
是否可以使用 PostAsJson 方法发布空属性?
答案 0 :(得分:1)
PostAsJsonAsync
仅用PostAsync
调用JsonMediaTypeFormatter
。该格式化程序,或更重要的是它的基类BaseJsonMediaTypeFormatter
,创建了一个JsonContractResolver
,它是Json.Net的IContractResolver
,并控制是否以及如何将成员序列化为json。它会从IRequiredMemberSelector
中调用JsonMediaTypeFormatter
,以查看成员是否应该be serialized even it it's null。
我认为您最好的选择是使用Json.Net序列化Dictionary,然后使用HttpClient发送字符串。像这样:
var json = JsonConvert.SerializeObject(content);
HttpCLient.PostAsync(uri, new StringContent(json, Encoding.UTF8, "application/json"));
答案 1 :(得分:1)
HttpClient没有$(document).ready(function() {
$('#portfolioNavbar ul li a').click(function() {
$(document).off("scroll");
$('#portfolioNavbar ul li a').each(function () {
$(this).removeClass('active');
})
$(this).addClass('active');
var tghsh = $(this).attr('href').substring(1);
var headerHeight = $('.portfolioi_left').outerHeight();
var winwid = $(window).width();
var doffset = $('#'+tghsh).offset().top-20;
var doffset1 = $('#'+tghsh).offset().top-280;
if(winwid <= 991) {
doffset1 -= headerHeight;
$('html, body').animate({scrollTop:doffset1},700);
return false;
}
$('html, body').animate({scrollTop:doffset},700);
return false;
});
});
function onScroll(event){
var scrollPos = $(document).scrollTop();
$('#portfolioNavbar ul li a').each(function () {
var currLink = $(this);
var refElement = $(currLink.attr("href"));
if (refElement.position().top <= scrollPos && refElement.position().top + refElement.height() > scrollPos) {
$('#portfolioNavbar ul li a').removeClass("active");
currLink.addClass("active");
}
else{
currLink.removeClass("active");
}
});
};
方法。这是an extension method由Microsoft.AspNet.WebApi.Client程序包添加的。它没有做任何特别困难的事情,它使用Json.NET将PostAsJsonAsync
对象序列化为JSON。您可以通过几行来完成相同的操作:
content
默认情况下,Json.Net 会序列化空属性。它将序列化字典中的所有项目,即使该项目的值为var json = JsonConvert.SerializeObject(someObject);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var result = await client.PostAsync(url, content);
您可以使用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);
值的字典项