프로그래밍/C#, .NET

[.NET] JSON 변환 시 '속성에 대한 참조 루프' 에러

당근천국 2023. 9. 21. 15:30

모델에 FK(foreign key)를 연결하려고 상호 참조를 했더니 다음과 같은 에러가 납니다.

 

Exception: 
Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property '[모델명]' with type '[네임스페이스]'. Path '[에러나 개체]'.
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CheckForCircularReference(JsonWriter writer, Object value, JsonProperty property, JsonContract contract, JsonContainerContract containerContract, JsonProperty containerProperty)

 

 

 

1. 원인

이 오류는 JSON 모델이나 클래스에서 상호 참조를 한 모델을 JSON으로 변환하려고 할 때 발생합니다.

예> 'A'모델에 'B'가 선언되어 있는데 'B'에는 'A'가 선언된 경우

 

문제는 'Entity Framework'에서 FK(foreign key, 외래키)를 연결할 때 상호참조하는 것이 일반적이라는 것입니다 ㅎㅎㅎ

 

 

2. 해결 방법

그래서 해당 속성을 JSON 변환 시 바인딩하지 않도록 '[JsonIgnore]' 속성을 붙여야 합니다.

 

이렇게 하면 JSON으로 변환할 때 해당 항목이 제외되면서 오류가 사라집니다.

 

 

3. 또 다른 문제

그런데 '[JsonIgnore]'속성을 붙였는데도 자꾸 저 에러가 발생한다는 것입니다.

 

원인을 찾지 못하던 중에......

이런 글을 발견했습니다.

참고 : stackoverflow - JsonIgnore attributes not working in ASP.NET?의 user369142님 답변

 

'[JsonIgnore]'은 'System.Text.Json.Serialization'와 'Newtonsoft.Json'에 둘 다 있습니다.

자신의 상황에 따라서 둘 중 하나를 선택해야 동작한다는 것입니다.

 

그래서 'Newtonsoft.Json'로 참조를 바꿔보니 잘 동작합니다....

(참고 : [.NET] 'JsonIgnore' 속성이 동작 안 하는 경우)

 

 

마무리

이 별거 아닌 오류에 시간을 꽤 잡아먹었습니다 ㅋㅋㅋㅋㅋ

다른 분들은 이렇게 시간 잡아먹지 않기를....