以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、名称、代码)

以JSON格式从LINQ到SQL检索数据

具体到您的第二个函数,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;
}

希望这能帮助