JSON은 JavaScript Object Notation의 약자로 가벼운 데이터를 주고받는 용도로 많이 사용됩니다. 또한, 문자를 사용하기 때문에 프로그래밍 언어뿐 아니라 사람이 확인하기도 매우 좋습니다. 그래서 JSON은 데이터 표준 방식 중 하나가 되었습니다. C#에서 JSON을 사용하는 것은 아주 쉬운데 제가 사용하고 있는, 아주 조금 더 편하게 쓰는 방법을 소개합니다.
✅ C# : Newtonsoft.Json
Newtonsoft.Json은 nuget에서 가장 많이 설치된 패키지 중 하나로 Visual Studio에서 nuget 찾아보기 탭을 들어가면 항상 상위에 위치하고 있습니다. Newtonsoft.Json 패키지를 설치합니다.
class -> JSON 변환에는 Newtonsoft.Json를 사용하고
JSON -> class로 변환에는 아래 코드를 사용합니다.
JSON은 배열 형태의 데이터 저장도 표현이 가능한데 C#에서 JSON을 배열형태로 받아오기 위해서는 List<> Type으로 Newtonsoft.Json.DeserializeObject를 호출해야합니다. 은근히 귀찮아서 함수명으로 구분하기 위한 class를 생성합니다.
JsonConverter.cs
public class JsonConverter<T> where T : class, new()
{
public static List<T>? DeserializeToList(string source)
{
if (source == null)
{
return null;
}
return JsonConvert.DeserializeObject<List<T>>(source);
}
public static T? Deserialize(string source)
{
if (source == null)
{
return null;
}
return JsonConvert.DeserializeObject<T>(source);
}
}
JsonConverter 클래스를 생성합니다.
사용법
// ..... 생략 ....
SetAPI.PDSCHInfo[2].state = 0;
SetAPI.LimitInfo.target_pwr = 24;
SetAPI.LimitInfo.pwr_thrshld = 2;
SetAPI.LimitInfo.freq_offset = 0.05;
SetAPI.LimitInfo.evm = 2.5;
SetAPI.LimitInfo.target_pwr = 2300;
// 단일 클래스
string singleClass
= JsonConvert.SerializeObject(SetAPI, Formatting.None);
ds_SetAPI singleClassResult
= JsonConverter<ds_SetAPI>.Deserialize(singleClass);
// List<클래스>
List<ds_SetAPI> listAPI = new List<ds_SetAPI>();
listAPI.Add(SetAPI);
listAPI.Add(SetAPI);
string listClass
= JsonConvert.SerializeObject(listAPI, Formatting.None);
List<ds_SetAPI> listClassResult
= JsonConverter<ds_SetAPI>.DeserializeToList(listClass);
JSON으로 변환하고자할 때는 JsonConvert (Newtonsoft.Json)을 사용합니다.
JSON을 다시 클래스로 변환할 때는 변환하려는 목표가 List 라면 JsonConverter의 DeserializeToList()를
단일 클래스라면 Deserialize()를 사용합니다.
✅ C# : Newtonsoft.Json - 끝
관련 포스팅