본문 바로가기

Programming/.Net Core

Json serialize option

.net platform에서 Json serialize하는 로직은 신경 쓰지 않아도 될만큼 충분히 훌륭하고 보편적이지만,

enum value를 처리할 때는 int로 내려주기 때문에 상대적으로 직관성이 떨어져 보입니다.


.net core에서 이를 customizing하기 위한 방법은 다음과 같습니다.


Startup.cs 파일의 ConfigureServices method에서 AddMvc() 호출 부분을 아래와 같이 보완합니다.

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddJsonOptions(options => {
options.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter(true));
options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
});
}


첫번째 옵션은 Enum을 string으로 처리해서 내려주는 option입니다.

예를 들어

enum Gender {

Male = 1,

Female = 2,

}

이라는 enum은

위 설정을 적용하기 전에는 "Gender":1 이라는 형태로 응답했다면,

설정을 변경한 이후에는 "Gender":"male" 이라는 형태로 응답하게 됩니다.


"Male"이 아니라 "male"로 전달하는 이유는 StringEnumConverter의 생성자에 전달한 true 인자가 camelCase선택을 위한 인자이기 때문입니다.

생성자 변수를 넘기지 않거나 false로 넘기게 되면 "Male"로 응답합니다.



두번째 옵션은 value가 null인 경우의 Json 생성 규칙을 재정의 한 것입니다.

Hobby라는 property(string)가 null인 경우

위 설정을 적용하기 전에는 "Hobby":null 이라는 형태로 응답했다면,

설정을 변경한 이후에는 "Hobby"라는 property 자체를 생략합니다.


Reference

https://gist.github.com/regisdiogo/27f62ef83a804668eb0d9d0f63989e3e