asp.net mvc 5 Dapper Json 正在映射整个模型 class
asp.net mvc 5 Dapper Json is mapping the whole model class
我在我的 ASP.NET MVC 5 应用程序中使用 Dapper,在我的查询中我只想要 2 个字段到 return 但 Json return 所有领域。这是我的模型
public class thread
{
[Key]
public int id { get; set; }
public int? profileID { get; set; }
public int numberkeeper { get; set; }
public int? photocount { get; set; }
}
这是我的控制器..
[ResponseType(typeof(thread))]
public IHttpActionResult Getstream()
{
string Connectionstring = ConfigurationManager.ConnectionStrings["db"].ConnectionString;
using (System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection(Connectionstring))
{
sqlConnection.Open();
var statevi = sqlConnection.Query<thread>("Select top 5 id,numberkeeper from threads").ToList();
if (statevi == null)
{
return NotFound();
}
return Ok(statevi);
}
}
该代码 returns Json 因为它使用的是 .Net Web API,正如您从查询中看到的那样,我只需要 2 个字段 returned。当我 运行 它并看到 Json 它显示所有字段 (4) 并且当然未选择的 2 个字段显示为 null 。我想要 Json 只显示 id 和 numberkeeper
的 returnn
如果您创建的新模型仅公开您要呈现的两个成员,这将阻止 Web API 返回额外的 JSON。
您还可以在将数据加载到使用 LINQ 的新匿名模型后转换数据。
return Ok(statevi.Select(s => new { s.id, s.numberkeeper }));
如果您想保留相同的模型,但不显示空值成员 Web API 允许您配置 JSON 格式以排除空属性。
config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
};
如果您想使用查询中的 2 行或选定的行,则可以使用查询方法和扩展方法...
1. LINQ查询方式
using (System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection(Connectionstring))
{
sqlConnection.Open();
var statevi = sqlConnection.Query<thread>("Select top 5 id,numberkeeper from threads").ToList();
if (statevi == null)
{
return NotFound();
}
var result = (from d in statevi
select new { d.id, d.numberkeeper }).ToList();
return Ok(result);
}
扩展方法:将此语法更改为上述查询方法的结果
var result = query.Select(d => new { d.Id, d.Title }).ToList();
两者都会给出相同的结果。
让我告诉您它是否适合您的项目。
创建 View Model
class:
public class ThreadViewModel
{
public int id { get; set; }
public int numberkeeper { get; set; }
}
让 Dapper 知道您希望它为您创建 ThreadViewModel:
var statevi = sqlConnection.Query<ThreadViewModel>("Select top 5 id,numberkeeper from threads").ToList();
通过这种方式,您既可以查询数据库中的相关属性,又可以 return 将它们发送给客户端(无需 Dapper 使用 nulls 创建完整的对象)。
我在我的 ASP.NET MVC 5 应用程序中使用 Dapper,在我的查询中我只想要 2 个字段到 return 但 Json return 所有领域。这是我的模型
public class thread
{
[Key]
public int id { get; set; }
public int? profileID { get; set; }
public int numberkeeper { get; set; }
public int? photocount { get; set; }
}
这是我的控制器..
[ResponseType(typeof(thread))]
public IHttpActionResult Getstream()
{
string Connectionstring = ConfigurationManager.ConnectionStrings["db"].ConnectionString;
using (System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection(Connectionstring))
{
sqlConnection.Open();
var statevi = sqlConnection.Query<thread>("Select top 5 id,numberkeeper from threads").ToList();
if (statevi == null)
{
return NotFound();
}
return Ok(statevi);
}
}
该代码 returns Json 因为它使用的是 .Net Web API,正如您从查询中看到的那样,我只需要 2 个字段 returned。当我 运行 它并看到 Json 它显示所有字段 (4) 并且当然未选择的 2 个字段显示为 null 。我想要 Json 只显示 id 和 numberkeeper
的 returnn如果您创建的新模型仅公开您要呈现的两个成员,这将阻止 Web API 返回额外的 JSON。
您还可以在将数据加载到使用 LINQ 的新匿名模型后转换数据。
return Ok(statevi.Select(s => new { s.id, s.numberkeeper }));
如果您想保留相同的模型,但不显示空值成员 Web API 允许您配置 JSON 格式以排除空属性。
config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
};
如果您想使用查询中的 2 行或选定的行,则可以使用查询方法和扩展方法... 1. LINQ查询方式
using (System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection(Connectionstring))
{
sqlConnection.Open();
var statevi = sqlConnection.Query<thread>("Select top 5 id,numberkeeper from threads").ToList();
if (statevi == null)
{
return NotFound();
}
var result = (from d in statevi
select new { d.id, d.numberkeeper }).ToList();
return Ok(result);
}
扩展方法:将此语法更改为上述查询方法的结果
var result = query.Select(d => new { d.Id, d.Title }).ToList();
两者都会给出相同的结果。 让我告诉您它是否适合您的项目。
创建 View Model
class:
public class ThreadViewModel
{
public int id { get; set; }
public int numberkeeper { get; set; }
}
让 Dapper 知道您希望它为您创建 ThreadViewModel:
var statevi = sqlConnection.Query<ThreadViewModel>("Select top 5 id,numberkeeper from threads").ToList();
通过这种方式,您既可以查询数据库中的相关属性,又可以 return 将它们发送给客户端(无需 Dapper 使用 nulls 创建完整的对象)。