如果在创建JSON响应时它为null,如何忽略属性?

时间:2016-10-04 11:33:06

标签: c# .net json linq

我有一个类如下:

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;
}

这里我创建了将数据返回服务的响应:

     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);

以下是我的JSON:

Output

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

这是否可行,因为我遵循了Question,其中写道它是不可能的。

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

return Json(response);

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

1 个答案:

答案 0 :(得分:2)

您可以告诉Json序列化程序忽略这样的空属性:

JsonConvert.SerializeObject(response, Newtonsoft.Json.Formatting.None, new JsonSerializerSettings { 
                                NullValueHandling = NullValueHandling.Ignore
                            });