【问题标题】:How to ignore property if it is null while creating JSON response? [duplicate]如果在创建 JSON 响应时为空,如何忽略属性? [复制]
【发布时间】:2016-10-04 11:33:06
【问题描述】:

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

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

     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:

现在在为每个表生成列数据时,如果 columns 为 null 假设 Table1 然后 我不希望此列字段存在 在我的 JSON 中

这可能吗,因为我关注了这个Question,其中写着这是不可能的。

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

return Json(response);

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

【问题讨论】:

  • 生成Json字符串的代码在哪里?没有它,其余的都无关紧要。实际上,您可以删除所有与数据库相关的代码并使用测试对象和序列化代码
  • @PanagiotisKanavos 我已经更新了我的问题以包含生成 json 响应的代码。我正在使用 JsonConvert.SerializeObject 来创建 json 响应
  • @Learning 特定属性或所有空属性?
  • @OrelEraki:假设如果我想忽略特定的属性那么有可能吗??
  • “你用什么来生成 JSON?” – “我正在使用 JSON.NET!” – JSON.NET 的解决方案 – “不用等,我真的撒了谎。你大错特错了,这不是复制品!!!” - 严重地?无论如何,请参阅 this questionthis question……它仍然是重复的。

标签: c# .net json linq


【解决方案1】:

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

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

【讨论】:

  • 你打败了我。 OP 还应该查看:stackoverflow.com/questions/9819640/… 这可能会有所帮助。
  • 好的,但假设我没有使用 JsonConvert.SerializeObject 对象,那么怎么可能做到这一点??
  • 我赞成您的回答,因为它适用于 jsonConvert.SerializeObject
猜你喜欢
  • 2022-11-21
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
  • 2017-08-08
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多