Когда я настраивал проект до того, как обнаружил это, когда пытался вернуться в моих категориях верхнего уровня выдавалась ошибка объектного цикла:
System.Text.Json.JsonException: обнаружен возможный цикл объекта. Это может быть связано либо с циклом, либо с тем, что глубина объекта превышает максимально допустимую глубину 32. Рассмотрите возможность использования ReferenceHandler.Preserve в JsonSerializerOptions для поддержки циклов.
Путь: $.Children .Родитель.Дети.Родитель.Дети.Родитель.Дети.Родитель.Дети.Родитель.Дети.Родитель.Дети.Родитель.Дети.Родитель.Дети.Родитель.Дети.Родитель.Имя.
at System.Text.Json.ThrowHelper.ThrowJsonException_SerializerCycleDetected(Int32 maxDepth)
Я последовал нескольким советам и поместил некоторые настройки параметров Json в свой Program.cs , чтобы избавиться от ошибки:
var builder = WebApplication.CreateBuilder(args);
{
builder.Services.TryAddSingleton(TimeProvider.System);
builder.Services
.AddScoped()
.AddScoped()
.AddScoped()
.AddScoped
()
.AddScoped()
.AddScoped()
.AddScoped()
.AddScoped()
.AddScoped()
.AddControllers(options => options.SuppressAsyncSuffixInActionNames = false)
.AddJsonOptions(options => options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles);
Кажется, это сработало, и оно вернуло категории верхнего уровня.
Каждая категория верхнего уровня имеет свойство Children, которое содержит все дочерние категории. У меня была только одна дочерняя категория для каждой категории верхнего уровня, и все возвращалось правильно, поэтому я подумал, что все в порядке.
Затем я добавил еще один уровень категории, так что он был на глубине 3. (верхний
уровень -> child1 -> child2), а затем, когда я делаю вызов для всех категорий верхнего уровня, child2 отключается (Steer Compost).

И вот мой ответ:
[
{
"name": "Garden",
"parentId": null,
"parent": null,
"children": [
{
"name": "Compost",
"parentId": "e9a9e63b-e71f-4aab-b1bb-97db5687048b",
"parent": null,
"children": [],
"products": [],
"id": "464b75f0-f5db-4fac-8023-ec39ae21ad79",
"dateAdded": "2024-10-14T20:51:57.167129Z"
}
],
"products": [],
"id": "e9a9e63b-e71f-4aab-b1bb-97db5687048b",
"dateAdded": "2024-08-07T13:59:27.182185Z"
},
{
"name": "Pets",
"parentId": null,
"parent": null,
"children": [
{
"name": "Pet Food",
"parentId": "f1dfe34c-adb2-4e19-81ad-d69d4c3364b9",
"parent": null,
"children": [],
"products": [],
"id": "b1000daf-d101-4ee3-b5b6-fb49e4aa5598",
"dateAdded": "2024-10-14T17:36:29.502663Z"
}
],
"products": [],
"id": "f1dfe34c-adb2-4e19-81ad-d69d4c3364b9",
"dateAdded": "2024-08-07T14:17:44.973453Z"
}
]
Вот мой метод из моего класса репозитория Entity Framework Core для категории:
public async Task getAllTopLevelCategories()
{
return await _context.Categories
.Include(p => p.Children)
.Where(category => category.ParentId == null)
.ToListAsync();
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... n-data-bei