Получение данных из LINQ to SQL в формате JSON?

У меня проблема с сериализацией данных из базы данных в формат JSON. Я использую WebAPI 2 и Entity Framework 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 столбца (идентификатор, имя, код)

+3
источник поделиться
2 ответа

В частности, для вашей второй функции 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));
}
+3
источник

вы не указали ошибку, когда возвращаете список из контроллера api. поскольку я предполагаю, что вы возвращаете объект базы данных, который в простом случае не позволяет вам как результат json, потому что ваш объект может быть связан с другими объектами в базе данных.

вы можете проверить эту ссылку для справки

Теперь измените свой код на что-то вроде ниже. Это просто, чтобы вы поняли.

Определить тип say 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> мы вернем IEnumerable<QR_Group_Return>

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

Надеюсь это поможет

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос