[C#] Newtonsoft.JSON를 이용한 Json 다루기


Development note/C#  2019. 5. 15. 22:18

안녕하세요. 명월입니다.

 

이번 글은 C#에서 Json을 다루는 라이브러리 Newtonsoft에 대해 소개하겠습니다.

예전 한 10년전만에도 xml의 형식으로 데이터를 다루는 프로그램을 많이 사용했었는데. 최근에는 거의 Json형식의 데이터를 다루는 프로그램이 주를 이루는 것 같습니다. 그렇다고 Xml를 안 쓰는건 아닙니다. Html 자체도 xml형식인데..

 

Newtonsoft 라이브러리는 이런 Json을 클래스 형식으로 변환하거나 반대로 클래스 형식을 Json형식으로 변환하는 라이브러리입니다.

그럼 Newtonsoft 라이브러리에 대해 알아보겠습니다.

 

먼저 Nuget으로 Newtonsoft.JSON을 다운, 참조합니다.

using System;
//네임스페이스 선언
using Newtonsoft.Json;

namespace NewtonsoftExample
{
  class JsonExample
  {
    public int Data1 { get; set; }
    public String Data2 { get; set; }
  }
  class Program
  {
    static void Main(string[] args)
    {
      //Json 형식의 데이터
      var json = "{ 'Data1': 1, 'Data2':'TEST' }";
      //Json 형식의 String 값을 JsonExmple 형식으로 변환
      var data = JsonConvert.DeserializeObject(json);

      // 결과 값은 1
      Console.WriteLine(data.Data1);
      // 결과 값은 TEST
      Console.WriteLine(data.Data2);

      data.Data1 = 10;
      data.Data2 = "Hello world";
    
      // JsonExample 형식을 Json형식의 String으로 변환
      json = JsonConvert.SerializeObject(data);
      // 결과 값은 {"Data1":10,"Data2":"Hello world"}
      Console.WriteLine(json);

      Console.WriteLine("Press Any Key...");
      Console.ReadKey();
    }
  }
}

위 형식을 보면 JsonConvert.DeserializeObject 함수를 써서 클래스 형식으로 변환되었습니다. 이 때 값은 변수 명에 맞추어서 Data1의 값은 1로 Data2의 값은 TEST로 할당이 됩니다.

이 때, 데이터 타입은 int 형이나 String 값을 넣게 되면 Exception을 발생시킵니다.

그리고 해당 변수명이 존재하지 않으면 입력이 되지 않습니다.

그리고 변수명은 규약대로 만들어야 하기 때문에 Json key값에 의해 변수명을 선언하고 싶지 않을 때는 JsonProperty의 어트리뷰트로 지정할 수도 있습니다.

using System;
//네임스페이스 선언
using Newtonsoft.Json;

namespace NewtonsoftExample
{
  class JsonExample
  {
    //key a의 값
    [JsonProperty("a")]
    public int Data1 { get; set; }

    //key b의 값
    [JsonProperty("b")]
    public String Data2 { get; set; }
  }
  class Program
  {
    static void Main(string[] args)
    {
      //Json 형식의 데이터
      var json = "{ 'a': 1, 'b':'TEST' }";
      //Json 형식의 String 값을 JsonExmple 형식으로 변환
      var data = JsonConvert.DeserializeObject(json);

      // 결과 값은 1
      Console.WriteLine(data.Data1);
      // 결과 값은 TEST
      Console.WriteLine(data.Data2);

      data.Data1 = 10;
      data.Data2 = "Hello world";
      
      // JsonExample 형식을 Json형식의 String으로 변환
      json = JsonConvert.SerializeObject(data);

      //JsonProperty에 맞추어서 Json값은 만든다.
      // 결과 값은 {"a":10,"b":"Hello world"}
      Console.WriteLine(json);


      Console.WriteLine("Press Any Key...");
      Console.ReadKey();
    }
  }
}

Newtonsoft.JSON 라이브러리는 위 설명이외에 많은 API가 있기는 하지만 제 기준으로는 그렇게까지 사용해 본 적이 없네요. 보통 변환 정도까지 사용합니다.

그리고 이 라이브러리는 생각보다 많이 사용됩니다. 특히 웹 MVC에서 ajax 통신을 할때는 거의 json으로 데이터를 주고 받기 때문에 많이 사용됩니다.

 

첨부파일입니다.

NewtonsoftExample.zip
0.14MB