以JSON格式从LINQ到SQL检索数据
本文关键字:SQL 检索 数据 LINQ JSON 格式 | 更新日期: 2023-09-27 18:00:20
我在将数据从数据库序列化为JSON格式时遇到问题。我使用的是WebAPI 2和实体框架6。我用EF创建了一个模型。甚至创建了数据库和包含内容的表。当我使用下面的代码时,当我键入http://localhost:54149/api/qr_group。
控制器:
private EfContext db = new EfContext();
// GET api/<controller>
public IEnumerable<QR_Group> GetGroups()
{
var result = from g in db.QR_Groups
select g;
return result.ToList();
}
我不知道如何使用Newtonsoft.Json以Json格式序列化包含内容的表。
我尝试了以下代码而不是上面的代码:
public IQueryable<QR_Group> GetGroups()
{
var groupList = (from g in db.QR_Groups
select new
{
name = g.name,
code = g.code
}).AsQueryable();
var json = JsonConvert.SerializeObject(groupList);
return json; //error CS0029: Cannot implicitly convert type `string' to `System.Linq.IQueryable<RestApi.Models.QR_Group>'
}
我得到错误CS0029.如何解决此问题以返回json中的数据?提醒:QR_Group实体有3列(Id、名称、代码)
具体到您的第二个函数,JsonConvert.SerializeObject只会将任何对象序列化为JSON格式的字符串,这意味着您应该返回一个字符串,而不是IQueryable<>。
因此,对于控制器,有很多方法可以将其返回,比如:在MVC中,如何返回字符串结果?
编辑:
以下代码将是一种工作方式:
控制器:
private EfContext db = new EfContext();
// GET api/<controller>
public ActionResult GetGroups()
{
var groupList = (from g in db.QR_Groups
select new
{
name = g.name,
code = g.code
}).AsQueryable();
return Content(JsonConvert.SerializeObject(groupList));
}
当您从api返回list时,您没有提到这个错误控制器。因为我假设您正在返回一个数据库实体在简单的情况下,不允许您作为json结果,因为您的实体可能与数据库中的其他实体链接。
您可以查看此链接以获取参考
现在将您的代码修改为如下所示。这只是为了让你明白。
定义一个类型,比如QR_Group_Return
public class QR_Group_Return{
public string name{ get; set;}
public string code{ get; set;}
// Some other properties will go here.
}
现在,我们将返回IEnumerable<QR_Group_Return>
,而不是返回IEnumerable<QR_Group>
private EfContext db = new EfContext();
// GET api/<controller>
public IEnumerable<QR_Group_Return> GetGroups()
{
var result = (from g in db.QR_Groups
select new QR_Group_Return {
name = g.name,
code = g.code,
// map your other properties also
}).ToList();
return result;
}
希望这能帮助