创建 JSON 响应时如何忽略属性(如果属性为 null)?

Pra*_*oni 0 .net c# linq json

我有 1 个类,如下所示:

public class Tables
    {
        public string Name { get; set; }
        public string[] Columns { get; set; }
    }

string[] selectedTables = { "Table1", "Table2"};
using (var conection = new SqlConnection("MyconnectionString"))
{
    connection.Open();

    var tables = (
        from table in connection.GetSchema("Tables").AsEnumerable()
        let name = (string)table["TABLE_NAME"]
        where selectedTables.Contains(name)
        let catalog = (string)table["TABLE_CATALOG"]
        let schema = (string)table["TABLE_SCHEMA"]
        select new Tables // this should really be called Table
        {
            Name = name,
            Columns = (
                from column in connection.GetSchema("Columns", new [] { catalog, schema, name }).AsEnumerable()
                select (string)column["COLUMN_NAME"]).ToArray()
        }).ToList();

    return tables;
}
Run Code Online (Sandbox Code Playgroud)

在这里,我正在创建响应以将数据返回到服务:

     var response = tables.
                      Select
                   (
                        t => new
                          {
                            id = t.Id,
                            tables = t.Tables
                            .Select
                            (
                              x => new
                               {
                                   name = x.Name,
                                   columns = x.Columns 
                               }
                             ).ToList()
                          }
                    ).ToList();

  return Json(response);
Run Code Online (Sandbox Code Playgroud)

下面是我的 JSON:

输出

现在,当为每个表生成列数据时,如果假设Table1 的列为空,那么我不希望此列字段出现在我的 JSON 中

这是否可能,因为我遵循这个问题,其中写着这是不可能的。

更新:我正在使用asp.net mvc,所以我这样做来创建json - 这可能吗?

return Json(response);
Run Code Online (Sandbox Code Playgroud)

这不是重复的问题,因为我正在使用 MVC 的 JSON 类来生成 JSON 结果。

Rob*_*ert 5

您可以告诉 Json 序列化程序忽略空属性,如下所示:

JsonConvert.SerializeObject(response, Newtonsoft.Json.Formatting.None, new JsonSerializerSettings { 
                                NullValueHandling = NullValueHandling.Ignore
                            });
Run Code Online (Sandbox Code Playgroud)