IM сталкивается с проблемой с вероятно selfreference Looping: Модель:Web Api; Entity Framework; Данные возвращает рекурсивный
public class ProtectedAccount
{
public int Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime Created { get; private set; }
public DateTime? Changed { get; set; }
public bool Disabled { get; set; }
public virtual ICollection<ProtectedAccountMember> Members { get; set; }
public virtual ProtectedAccountType Type { get; set; }
}
public class ProtectedAccountMember
{
public int Id { get; set; }
[StringLength(300)]
public string Name { get; set; }
[Index]
public virtual ProtectedAccount ProtectedAccount { get; set; }
}
Контроллер:
[ResponseType(typeof(ProtectedAccount))]
[Route("ProtectedAccounts/{id}/Members")]
[HttpGet]
public IHttpActionResult GetProtectedAccountMembers(int id)
{
var protectedAccount = db.ProtectedAccounts.Find(id);
if (protectedAccount == null)
{
return NotFound();
}
return Ok(protectedAccount.Members.ToList());
}
данные которым я получить для ГЭТ, кажется рекурсией через все навигаций:
[
{
"ProtectedAccount": {
"Members": [
{
"Id": 2,
"Name": "XXX, XX",
},
{
"Id": 3,
"Name": "XX, XX",
}
],
"Type": null,
"Id": 25,
"ObjectGUID": "76bf65e7-af60-4fe8-b3e1-90afbfd65b65",
"Name": "XXX",
},
"Id": 1,
"Name": "test",
},
{
"ProtectedAccount": {
"Members": [
{
"Id": 1,
"Name": "test",
},
{
"Id": 3,
"Name": "XX, XX",
"SamAccountName": "XX",
"Disabled": false
}
],
"Type": null,
"Id": 25,
"ObjectGUID": "76bf65e7-af60-4fe8-b3e1-90afbfd65b65",
"Name": "XXXX",
},
"Id": 2,
"Name": "XX, XX",
},
{
"ProtectedAccount": {a
"Members": [
{
"Id": 1,
"Name": "test",
"SamAccountName": "XXX",
"Disabled": false
},
{
"Id": 2,
"Name": "XX, XX",
"SamAccountName": "XX",
"Disabled": false
}
],
"Type": null,
"Id": 25,
"ObjectGUID": "76bf65e7-af60-4fe8-b3e1-90afbfd65b65",
"Name": "XXX",
},
"Id": 3,
"Name": "XX, XX",
}
]
В базе данных содержится только одна «ProtectedAccount». Я должен использовать DTO для решения этой проблемы? Я пробовал какую-то конфигурацию с помощью json formatsettings, но не получал никаких лучших результатов.
Похоже, вы жертва Js сериализации ходить весь граф объектов. Непонятно, что вы хотите. Вы вообще не хотите объектов ProtectedCount? Если вы посмотрите на http://stackoverflow.com/questions/10169648/how-to-exclude-property-from-json-serialization –
Да, всегда лучше использовать DTO, а не отправлять объект базы данных непосредственно клиенту , – jvanrhyn
@ Pr1m-e Я перечитал, и было ясно, но SO не позволит мне редактировать. Я в основном предлагаю добавить атрибут в ссылку ProtectedAccount внутри класса Member, но если у вас много вызовов API, чтобы рассмотреть, тогда DTO может быть способом пойти –