.NET Core:从Json响应中删除空数组

时间:2018-09-27 12:31:45

标签: c# .net json .net-core

我遇到与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,它也始终变为空。 谢谢。

1 个答案:

答案 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);
}