2023. 9. 8. 15:30

'JsonIgnore'속성은 JSON으로 출력할 때 무시하게 해주는 속성입니다.

해당 속성으로 지정되어 있으면 JSON으로 출력할 때 해당 필드가 없어야 합니다.

 

그런데 이 속성이 제대로 적용이 될 때가 있고 안될 때가 있는 겁니다...?????

 

 

1. 원인을 찾아서~

원인은 의외로 간단한데......

'JsonIgnore'은 두 군데에 선언이 되어 있습니다.

System.Text.Json.Serialization

Newtonsoft.Json

 

만약 자신이 'System.Text.Json.Serialization'를 사용 중인데 'Newtonsoft.Json.JsonIgnore'를 사용한다거나

반대로 ''Newtonsoft.Json'을 사용 중인데 'System.Text.Json.Serialization'를 사용했다면 동작하지 않습니다.

 

 

2. 해결 방법

자신의 프로젝트에 맞게 아래 두 개 중 한 개를 'using'해주면 됩니다.

using System.Text.Json.Serialization;

---- 혹은 -----

using Newtonsoft.Json;

 

만약 두 개가 혼제된 프로젝트라면 아래와 같이 둘 다 속성에 넣어주는 게 좋습니다.

[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public byte[] Version { get; set; } = new byte[0];

 

마무리

이게 되다 말다 하고 있던 것도 모르고 잘되는지 알고 이것저것 하다가

엔트리 프레임웍(Entity Framework)에서 '속성에 대한 참조 루프'에러가 나서

"아니 제외된 프로퍼티가 왜 참조 루프가 일어나?"

하면서 봤더니 이런 문제가 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

어쩐지 가끔 프론트엔드에 전달하면 안 되는 필드가 있는 경우가 있어서 뭔가 했더니 이 문제였다니...