Я не получаю надлежащего возврата JSON. Любые идеи? Есть лучший способ сделать это? Нужен ли мне DataTable?
public JsonResult ReportData(string pdfID)
{
string sqlConnectionString = @"ConnectThatThangStuff;";
string queryString = @"SELECT stuffs FROM Thingy;";
var json = string.Empty;
using (SqlConnection connection = new SqlConnection(sqlConnectionString))
{
SqlCommand cmd = new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(reader);
json = JsonConvert.SerializeObject(dt);
}
return Json(json, JsonRequestBehavior.AllowGet);
}
И что я получу за свои усилия? Эта хрень:
"[{\"transid\":1111,\"FromEmailAddress\":\"[email protected]\",\"Name\":\"bob doe\",\"EmailAddress\":\"[email protected]\",\"CreateDt\":\"4/08/2021\",\"ExpirationDt\":\"5/08/2021\",\"Status\":\"Complete\",\"FinalDt\":\"4/09/2021\"},{\"transid\":22222,\"FromEmailAddress\":\"[email protected]\",\"Name\":\"bill doe\",\"EmailAddress\":\"[email protected]\",\"CreateDt\":\"4/08/2021\",\"ExpirationDt\":\"5/08/2021\",\"Status\":\"Ready\",\"FinalDt\":null}]"
На мой взгляд, мне нужен JOSN для создания jQuery DataTable. Если есть более простой способ перейти от SQL Query — ›jQuery DataTable, я тоже воспользуюсь этим.
Я не использую Entity Framework.
Если вам нужно сериализовать DataTable
с помощью System.Text.Json
, см. Сериализовать DataSet с текущей версией System.Text.Json.JsonSerializer. — person flashsplat schedule 12.04.2021
return Json(object);
выполняет сериализацию за вас, попробуйте передатьdt
прямо тудаХорошо спасибо. Когда я это делаю, я получаю:
A circular reference was detected while serializing an object of type 'System.Reflection.RuntimeModule'.
— person flashsplat; 09.04.2021Как говорили другие, вы дважды сериализуете. Вы можете решить эту проблему, избегая при этом проблемы с циклической ссылкой, используя _ 1_ вместо метода _ 2_ в вашем контроллере:
Вам также потребуется изменить подпись метода, чтобы он возвращал _ 4_ (или _ 5_) вместо _ 6_.
Спасибо, это именно то, чем я закончил. — person flashsplat; 10.04.2021
Вы дважды конвертируете объект в JSON:
Фактически, если вы присмотритесь, вы увидите, что ваша переменная
json
является строкой.Когда вы передаете строку методу
Json
, он преобразует строку в json, что и есть у вас.Я предлагаю вам пропустить звонок на
JsonConvert.Serialize
и просто позвонитьJson(dt)
.Однако небольшой совет:
JsonConvert.Serialize
вызывает Newtonsoft Json (JSON.NET) для сериализации. Вызывая Json напрямую, ASP.Net будет обрабатывать сериализацию, и, если она не настроена должным образом, вы можетеSystem.Text.Json
позаботиться о сериализации за вас, что немного изменит то, как вы справляетесь с проблемами сериализации, такими как изменение корпуса, настройка имен свойств и решение конверсии.Спасибо за подробное объяснение. Я получаю следующее сообщение об ошибке:
A circular reference was detected while serializing an object of type 'System.Reflection.RuntimeModule'.
Что я буду исследовать. — person flashsplat; 09.04.2021