В ASP.Net Core 1.1 Solution обнаружена собственная ссылка
Хотя я следил за статьей здесь, я продолжаю получать ошибку
обнаружен цикл самоссылки для свойства '...' с типом '...'. Путь '[4]....[0]'.
Я добавил это в мой Startup.cs
:
services.AddMvc()
.AddJsonOptions(opt =>
opt.SerializerSettings.ReferenceLoopHandling =
ReferenceLoopHandling.Ignore
);
Что еще может вызвать ошибку референсного цикла?
РЕДАКТИРОВАТЬ: Ответ на вопрос в комментариях... Затрагиваемые классы:
public partial class GuidingSymptom
{
public GuidingSymptom()
{
VideosGuidingSymptoms = new HashSet<VideosGuidingSymptoms>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[MaxLength(70)]
[Required]
public string Name { get; set; }
public string Description { get; set; }
public int SeverityId { get; set; }
public int? DiagnoseId { get; set; }
[InverseProperty("GuidingSymptom")]
public virtual ICollection<VideosGuidingSymptoms> VideosGuidingSymptoms { get; set; }
[ForeignKey("DiagnoseId")]
[InverseProperty("GuidingSymptom")]
public virtual Diagnose Diagnose { get; set; }
[ForeignKey("SeverityId")]
[InverseProperty("GuidingSymptom")]
public virtual GuidingSymptomSeverity Severity { get; set; }
}
public partial class VideosGuidingSymptoms
{
public int VideoId { get; set; }
public int GuidingSymptomId { get; set; }
[ForeignKey("GuidingSymptomId")]
[InverseProperty("VideosGuidingSymptoms")]
public virtual GuidingSymptom GuidingSymptom { get; set; }
[ForeignKey("VideoId")]
[InverseProperty("VideosGuidingSymptoms")]
public virtual Video Video { get; set; }
}
1 ответ
Я нашел решение, которое нужно добавить
[JsonIgnore]
аннотация к пострадавшей собственности. Тем не менее, я ожидал, что это не будет необходимо при использовании ReferenceLoopHandling.Ignore
Некоторые платформы сериализации не допускают таких циклов. Например, Json.NET сгенерирует следующее исключение, если возникнет цикл.
Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property 'Blog' with type 'MyApplication.Models.Blog'.
Если вы используете ASP.NET Core, вы можете настроить Json.NET на игнорирование циклов, которые он находит в графе объектов. Это сделано в ConfigureServices(...)
метод в Startup.cs
,
public void ConfigureServices(IServiceCollection services)
{
...
services.AddMvc()
.AddJsonOptions(
options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
);
...
}
https://docs.microsoft.com/en-us/ef/core/querying/related-data