System.Text.Json

냐옹·2024년 7월 16일
0

.NET

목록 보기
31/31

System.Text.Json

  • 기존의 JSON지원 클래스의 default 는 NewtonSoft.json이었으나 System.Text.Json으로 변경되었다.
  • 제공하는 기능은 다음과 같다.
  1. C# 객체를 json문자열로 변경 (serialize)
  2. json 문자열을 C# 객체로 복원 (desirialize)
  3. JsonDocument와 JsonElement 클래스를 통해서 json문자열을 메모리 상에서 json dom으로 만들고 json요소를 자유롭게 navigation할 수 있는 기능
  4. System.Text.Json 네임스페이스에는 또한 utf-8으로 인코딩된 json바이트들을 읽을 수 있는 UTF8JsonReader클래스, 반대로 쓰기 기능을 하는 Utf8JsonWriter클래스가 제공되고 있다.
  • Serialize
static void Main(string[] args){
	// 직렬화
  	Person person = new Person { Id=1, Name="Alex" };
	string jsonPerson = JsonSerializer.Serialize(person);
  
  	Console.WriteLine(jsonPerson);
  	// 문자열로 직렬화된 거 출력 "{\"Id\":1,\"Name\":\"Alex\"}"
  
  	var jsonOptions = new JsonSerializerOptions{
    	WriteIndented = true
    };
  
  	string jsonString = "{\"Id\":1,\"Name\":\"Alex\"}";
  	var personObj = JsonSerializer.Deserialize<Person>(jsonString, jsonOptions);
  
  	Console.WriteLine($"{personObj.Id}, {personObj.Name}");
  
  	string jsonString = 
}
    
public class Person{
	public int Id{get;set;}
  	public string Name{get;set;}
}
Json DOM 사용
  • 큰 json 데이터를 사용할 때 일부 요소만 필요한 경우가 있다.

  • 이러한 경우에 역직렬화를 통해서 전체를 객체로 변환하는 것보다 json dom을 사용하여 필요한 요소만 발췌하는 것이 편하다.

  • 특히 json dom을 사용하면, 역직렬화에서 사용할 객체의 클래스를 C#에서 정의하지 않아도 된다.

  • System.Text.Json에서 JsonDocument클래스는 문자열이나 utf-8 바이트 배열로부터 json dom을 생성하는데 사용한다.

  • dom안의 각각의 요소는 jsonElement클래스를 통해서 엑세스한다.

  • JsonElementGetProperty()메서드는 속성명에 상응하는 요소(JsonElement)를 리턴하는데, 이 요소는 문자열이나 숫자 같은 기초 데이터 타입일 수도 있지만, Json객체 또는 Json배열과 같은 타입일 수 있다.

  • 그리고, JsonElement에는 다양한 기초 데이터 타입의 값을 읽어내는 여러 Get메서드(GetString(), GetInt32())등이 있다.

// Json DOM
string jsonString = "{\"Id\":1,\"Address\":{\"Zip\":\"98052\",\"State\":\"WA\"}}";
JsonDocument jdom = JsonDocument.Parse(jsonString);
JsonElement jroot = jdom.RootElement;

JsonElement jaddr = jroot.GetProperty("Address");
string zip = jaddr.GetProperty("Zip").GetString();
Console.WriteLine(zip);

0개의 댓글

Powered by GraphCDN, the GraphQL CDN