본문 바로가기
Programming/C# & .NET

[C#] JsonConvert null 해결방법

by Kor-IT 2022. 10. 13.
반응형

JsonConvert null 해결방법

 

 

JSON 데이터를 직렬화/역직렬화할때 null로 인한 오류가 발생하는 경우가 있다. 이런 경우 해결법이 몇 가지 있는데 간단하게 확인해보자. 

 

{
    "id":0,
    "name":null,
    "nickName":null,
    "createTime":null,
    "claimTime":null
}

위와 같은 데이터를 받는다고 가정하자. 'id' 필드를 제외한 나머지 값들은 모두 null 인 상태이다. 

 

class User
{
    public int id { get; set; }
    public string name { get; set; }
    public string nickName { get; set; }
    public DateTime createTime { get; set; }
    public DateTime claimTime { get; set; }
}

Class 를 받는 데이터에 맞게 정의했다. JsonConvert를 통해 직렬화/역직렬화 할 때 null 값에 대해 해결하는 방법을 알아보자.

 

 

방법 1. Nullable(?) 타입

변수 타입에 Nullable을 붙여 null 값을 받을 수 있게 처리한다. 데이터 타입 뒤에 '?'를 붙이면 컴파일 시 Nullable로 변경되어 처리된다.

class User
{
    public int id { get; set; }
    public string? name { get; set; }
    public string? nickName { get; set; }
    public DateTime? createTime { get; set; }
    public DateTime? claimTime { get; set; }
}

 

방법 2. JsonSerializerSettings

https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_NullValueHandling.htm

 

NullValueHandling Enumeration

NullValueHandling Ignore Example

www.newtonsoft.com

JsonSerializerSettings 옵션을 사용하여 null 값에 대해서 설정할 수 있다. JsonSerializerSettings는 Newtonsoft.Json을 참조하여 사용해야 한다. 해당 옵션 중 NullValueHandling을 통해 null에 대한 처리가 가능하다. null을 무시하고 싶다면 NullValueHandling.Ignore 사용하면 된다.

JsonConvert.DeserializeObject<User>(strTest, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore })

 

개인적으로 Nullable 타입을 선언하기보다는 JsonSerializerSettings 옵션을 통해 사용하는건 권장하고 싶다. Newtonsoft의 옵션을 통해 설정 가능하며 쉽게 옵션을 바꿀 수 있기 때문이다. 이밖에 다른 방법이 있다면 댓글로 남겨주길 바랍니다.

 

반응형

댓글