Developer/C#, 닷넷

C# JSON 활용하기(직렬화, 역직렬화)

우주로그 2022. 8. 11.

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 값을 정상적으로 가져올 수 있는 것을 확인할 수 있습니다.

댓글