我遇到与Json响应有关的问题。 这是响应示例:
public class ContentModel
{
public int? Total { get; set; }
public IEnumerable<ContentResultModel> Results { get; set; }
public FullContentModel Result { get; set; }
public IEnumerable<PaginationModel> Pagination { get; set; }
public IEnumerable<ContentCommentsModel> Comments { get; set; }
}
如果分页为空,我不希望分页出现。例如,当它为null时,我使用:
options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
是否有类似的东西可以解决我的问题?我已经搜索过了,几乎每个人都使用了正则表达式,但是我想避免这种情况,并尽可能使用更简单明了的东西。
即使我说 pagination 属性为null,它也始终变为空。 谢谢。
答案 0 :(得分:1)
当列表为空时,您可以使用ShouldSerialize
方法轻松地扩展类定义,以省略Pagination
属性。您可以在Json.Net docs中找到更多信息。
public class ContentModel
{
public int? Total { get; set; }
public IEnumerable<ContentResultModel> Results { get; set; }
public FullContentModel Result { get; set; }
public IEnumerable<PaginationModel> Pagination { get; set; }
public IEnumerable<ContentCommentsModel> Comments { get; set; }
public bool ShouldSerializePagination()
{
// don't serialize the Pagination property, when the list is empty
return Pagination != null && Pagination.Count() > 0;
}
}
用法示例:然后,当列表为null或为空时,您可以在ApiController中返回类型ContentModel
的对象,并且JSON响应中将不存在分页属性。
[HttpGet]
public ActionResult<ContentModel> Get()
{
var model = new ContentModel
{
Total = 12
};
return Ok(model);
}