[.NET] JSON 변환 시 '속성에 대한 참조 루프' 에러
모델에 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' 속성이 동작 안 하는 경우)
마무리
이 별거 아닌 오류에 시간을 꽤 잡아먹었습니다 ㅋㅋㅋㅋㅋ
다른 분들은 이렇게 시간 잡아먹지 않기를....