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
JsonSerializerSettings 옵션을 사용하여 null 값에 대해서 설정할 수 있다. JsonSerializerSettings는 Newtonsoft.Json을 참조하여 사용해야 한다. 해당 옵션 중 NullValueHandling을 통해 null에 대한 처리가 가능하다. null을 무시하고 싶다면 NullValueHandling.Ignore 사용하면 된다.
JsonConvert.DeserializeObject<User>(strTest, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore })
개인적으로 Nullable 타입을 선언하기보다는 JsonSerializerSettings 옵션을 통해 사용하는건 권장하고 싶다. Newtonsoft의 옵션을 통해 설정 가능하며 쉽게 옵션을 바꿀 수 있기 때문이다. 이밖에 다른 방법이 있다면 댓글로 남겨주길 바랍니다.
'Programming > C# & .NET' 카테고리의 다른 글
[C#] 확장메서드 (Extension Method) (1) | 2022.10.28 |
---|---|
[C#] List 정렬 총정리(기본정렬, 여러개 정렬) (0) | 2022.10.18 |
[C#] Json 직렬화/역직렬화 속성 제외하는 방법 (1) | 2022.09.14 |
[C#] lock 문 사용법 (1) | 2022.08.03 |
[C#] 멀티스레드 (Multi-Thread) (1) | 2022.08.02 |
댓글