C#에서 JSON 형태로 직렬화/역직렬화 하는 방법에 대해 알아보겠습니다.
1. JSON이란?
JSON(JavaScript Object Notation)는 이름에서 알 수 있듯이 Javascript에서 객체를 만들 때 사용하는 표현식입니다.
하지만 현재는 Javascript 뿐만 아니라, 모든 언어에서 광범위하게 사용되고 있습니다.
그 이유는, JSON이라는 것 자체가 어떠한 기술을 말하는 것이 아니라, 데이터를 표현하는 방법이기 때문입니다.
JSON은 key:value가 쌍으로 이루어진 표현 방법입니다.
주로 상호간 데이터 통신을 할 때 사용합니다.
객체를 string로 변환 후 전송하고, string으로 받은 값을 다시 객체로 변환해서 값을 사용하는 것 입니다.
key value 모두 문자열의 경우 쌍따음표로 묶어줘야 하며, 숫자는 쌍따음표를 사용하지 않습니다.
숫자를 쌍따음표로 묶으면, 데이터 형식은 숫자가 아닌 문자로 인식됩니다.
{
"Age" : 9,
"Name" : "jayden"
}
1. JSON 직열화 대상 class 생성
위와 같은 오브젝트를 만들기 위해 class를 먼저 생성해주겠습니다.
사람을 생성할 수 있는 Person class를 생성해줍니다.
속성으로 Age와 Name을 가지고 있습니다.
public class Person
{
public int Age { get; set; }
public string Name { get; set; }
}
2. JSON 패키지 설치
Nuget 패키지 관리에서 설치할 수도 있지만, 소스코드를 이용해서 설치를 하겠습니다.
소스 코드에 "JsonConvert"라고 입력을 해주면, visual studio에서는 해당 구문을 이해할 수 없다고 빨간색 줄이 나타납니다.
빨간색 줄이 그어진 JsonConvert에 마우스를 옮기고 잠시 기다리면 아래와 같이 문구가 표기됩니다.
그럼 여기서 "잠재적 수정 사항 표시"를 클릭합니다.
이후, 하단 "Newtonsoft.Json 패키지 설치 - 최신 버전 찾기 및 설치를 눌러줍니다.
그럼 잠시 후 "JsonConvert"라는 문구가 class를 나타내는 색으로 바뀐 것을 확인 할 수 없습니다.
빨간색 줄은 아직 코드가 완성되지 않아 나타나는 구문 오류 때문이니 현재는 무시하면 됩니다.
3. JSON 직렬화
이제 특정 사람을 1명 생성 후 JSON 직렬화를 해보겠습니다.
public class Program
{
static void Main(string[] args)
{
Person jayden = new Person();
jayden.Age = 9;
jayden.Name = "Jayden";
string serializeJson = JsonConvert.SerializeObject(jayden);
Console.WriteLine(serializeJson);
}
}
jayden이라는 이름으로 Person 객체를 생성하고, Age와 Name 값을 할당합니다.
Person jayden = new Person();
jayden.Age = 9;
jayden.Name = "Jayden";
JsonConvert.SerializeObject로 jayden 객체를 직렬화해줍니다.
확인을 위해 출력을 합니다.
string serializeJson = JsonConvert.SerializeObject(jayden);
Console.WriteLine(serializeJson);
결과입니다.
처음 설명 드린 것과 같은 형식으로 잘 처리됐네요.
4. JSON 역직렬화
이제 string 형태의 JSON 구조를 다시 객체 형태로 변환해보겠습니다.
JsonConvert.DeserializeObject를 Person 구조 형태로 변환해주면 됩니다.
static void Main(string[] args)
{
Person jayden = new Person();
jayden.Age = 9;
jayden.Name = "Jayden";
string serializeJson = JsonConvert.SerializeObject(jayden);
// Console.WriteLine(serializeJson);
Person desirializeJson = JsonConvert.DeserializeObject<Person>(serializeJson);
Console.WriteLine($"age : {desirializeJson.Age}, name : {desirializeJson.Name}");
}
jayden의 Age와 Name 값을 정상적으로 가져올 수 있는 것을 확인할 수 있습니다.
'Developer > C#, 닷넷' 카테고리의 다른 글
C# delegate 개념과 사용 이유 (0) | 2022.08.13 |
---|---|
C# 객체(Object), 클래스(Class), 인스턴스(Instance) 차이 비교 (0) | 2022.08.12 |
C# 프로젝트 생성, Hello World 출력 (0) | 2022.08.10 |
C# Visual Studio 설치 (0) | 2022.08.10 |
C# 채팅 비속어 필터링 처리 (0) | 2022.08.09 |
댓글