如何在创建JSON响应时忽略属性为空?

问题描述:

我有1类象下面这样:如何在创建JSON响应时忽略属性为空?

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

现在,当如果列为空,则为每个表生成列数据假设为表1然后我不希望此列字段在我的JSON中存在 。

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

更新:我使用asp.net的MVC,所以我做这样的创造json - 这可能吗?

return Json(response); 

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

+1

是在哪里产生的JSON字符串的代码?没有它,其余的就不相关了。事实上,你可以删除所有与数据库相关的代码,并使用测试对象和序列化代码 –

+0

@PanagiotisKanavos我已更新我的问题,包括生成json response.i的代码,我用JsonConvert.SerializeObject创建json响应 –

+0

@Learning特定的属性或所有的空属性? –

你可以告诉JSON序列忽略空性质是这样的:

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

您击败了我。 OP也应该看看:http://stackoverflow.com/questions/9819640/ignoring-null-fields-in-json-net这可能会有所帮助。 –

+0

确定这个工程,但假设如果我不使用JsonConvert.SerializeObject对象,那么如何可以做到这一点? –

+0

我已经upvoted你的答案,因为它适用于jsonConvert.SerializeObject –