#c# #ajax #asp.net-mvc
#c# #ajax #asp.net-mvc
Вопрос:
Я пытаюсь выполнить простой возврат JSON, но у меня возникают проблемы, которые у меня есть ниже.
[HttpGet]
public JsonResult GetItemsEdit()
{
try
{
var data = _unitOfWork.Items.GetItems();
return Json(new
{
data
}, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Json(ex.Message);
}
}
и это мой код вызова ajax:
// Gets Items on Dropdown
$.ajax({
type: "GET",
url: "/Payments/GetItemsEdit",
datatype: "application/json",
success: function (data) {
debugger
alert("ok");
$.each(data, function (index, value) {
$('#Item').append('<option value="' value.Id '">' value.itemName '</option>');
});
},
error: function (err) {
console.log("AJAX error in request: " JSON.stringify(err, null, 2));
}
});
Я получаю HTTP 500 с исключением, как показано в названии этого вопроса.
Это ошибка или моя реализация?
Комментарии:
1. какую библиотеку json вы используете?
Ответ №1:
Нет, это не ошибка, и на самом деле проблема не в вашей реализации. Проблема заключается в структуре возвращаемой модели.
Вы можете либо преобразовать свою модель в другую модель без ссылок вручную, например.
var data = _unitOfWork.Items.GetItems().Select(x => new { ... });
или, в зависимости от используемого вами сериализатора json, вы можете включить игнорирование циклических ссылок.
пример для Newtonsoft.json
services
.AddMvc()
.AddJsonOptions(jsonOptions => { jsonOptions.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; } );
Еще немного информации о System.Text.Библиотека Json.
Комментарии:
1. как я могу игнорировать циклические ссылки по деталям, пожалуйста
2. где напишите эту строку в моем коде, пожалуйста
services .AddMvc() .AddJsonOptions(jsonOptions => { jsonOptions.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; } );
3. в вашем Startup.cs. Я не уверен, какую версию .net / .net core вы используете (и какой сериализатор json).
4. я использую json версии 6 и .net mvc
5. извините, пропустил эту часть. Мой ответ был нацелен на .net core