我有一个类如下:
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:
现在为每个表生成列数据,如果列为空,假设 Table1 ,那么我不希望此列字段存在 在我的JSON 。
这是否可行,因为我遵循了Question,其中写道它是不可能的。
更新:我正在使用 asp.net mvc ,所以我这样做是为了创建json - 这可能吗?
return Json(response);
这不是重复的问题,因为我使用MVC的JSON类来生成JSON结果。
答案 0 :(得分:2)
您可以告诉Json序列化程序忽略这样的空属性:
JsonConvert.SerializeObject(response, Newtonsoft.Json.Formatting.None, new JsonSerializerSettings {
NullValueHandling = NullValueHandling.Ignore
});