У меня есть веб-API с ASP.NET, и я пытаюсь вернуть некоторые данные, но это вызывает проблемы, так как ссылается на объекты, на которые я не хочу ссылаться.
Структура класса вэтот случай выглядит следующим образом:
Entitats (Entities), Equips (Team) и Esports (Sports)
У Entity есть много Команд , а у одной Team есть только один Sport .
. Я использую Entity Framework иОбъекты имеют отношения в обе стороны; Sport имеет много команд , а Team имеет Entity .
Вот запрос, который я делаю дляполучить сущность со своей командой и каждую команду со своим видом спорта.
entitats _entitat = (
from e in db.entitats
.Include("equips.esports")
where e.id == id
select e
).FirstOrDefault();
Это должно дать мне именно то, что я хочу, проблема в том, что в первой команде, когда она показывает мне спорт, спортсодержит все другие команды (из этой сущности), которые имеют тот же вид спорта, а затем, когда пришло время показать их в массиве команд, он использует $ ref и $ id.
"$id": "1",
"equips": [
{
"$id": "2",
"activitats_concedides": [],
"activitats_demanades": [],
"categories": null,
"categories_competicio": null,
"competicions": null,
"entitats": {
"$ref": "1"
},
"esports": {
"$id": "3",
// These shouldn't even be here
"equips": [
{
"$ref": "2"
},
{
"$id": "4",
"activitats_concedides": [],
"activitats_demanades": [],
"categories": null,
"categories_competicio": null,
"competicions": null,
"entitats": {
"$ref": "1"
},
"esports": {
"$ref": "3"
},
"sexes": null,
"id": 8,
"nom": "Test 2",
"id_entitat": 1,
"id_categoria": 3,
"id_esport": 1,
"id_competicio": 2,
"id_categoria_competicio": null,
"id_sexe": 3,
"borrat": false
},
{
"$id": "5",
"activitats_concedides": [],
"activitats_demanades": [],
"categories": null,
"categories_competicio": null,
"competicions": null,
"entitats": {
"$ref": "1"
},
"esports": {
"$ref": "3"
},
"sexes": null,
"id": 9,
"nom": "Test 3",
"id_entitat": 1,
"id_categoria": 2,
"id_esport": 1,
"id_competicio": 2,
"id_categoria_competicio": null,
"id_sexe": 2,
"borrat": false
},
{
"$id": "6",
"activitats_concedides": [],
"activitats_demanades": [],
"categories": null,
"categories_competicio": null,
"competicions": null,
"entitats": {
"$ref": "1"
},
"esports": {
"$ref": "3"
},
"sexes": null,
"id": 10,
"nom": "prova",
"id_entitat": 1,
"id_categoria": 3,
"id_esport": 1,
"id_competicio": 2,
"id_categoria_competicio": null,
"id_sexe": 2,
"borrat": false
}
],
"id": 1,
"nom": "Futbol"
},
"sexes": null,
"id": 3,
"nom": "Test 1",
"id_entitat": 1,
"id_categoria": 6,
"id_esport": 1,
"id_competicio": 1,
"id_categoria_competicio": null,
"id_sexe": 1,
"borrat": false
},
{
"$ref": "4" // These should be the "full" objects
},
{
"$ref": "5"
},
{
"$ref": "6"
}
],
"telefons": [],
"id": 1,
"nom": "Futbol Club Sant Cugat del Valles",
"direccio": "Sample Carrer 1",
"cif": "B12345678",
"temporada": "2019 ",
"correu": "entitat1@test.com",
"facebook": null,
"instagram": null,
"twitter": null,
"password": "8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92",
"borrat": true}
Я не спрашивалКоманды каждого вида спорта, поэтому я не знаю, почему он показывает их.То же самое происходит с сущностью команд, в этом случае это не проблема, поскольку она не мешает выводу, но в других случаях это так.Я полагаю, что это показывает, что если он показывает объекты, которые вы «просили», как можно ближе к вершине, а затем в том месте, где они вам действительно нужны, он просто ссылается.
Если вы, ребята, знаете, что не такЯ был бы очень признателен.Спасибо!
PD: Я пытался изменить эту опцию безуспешно, она только ухудшает ситуацию.
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;