System.Text.Json 네임스페이스는 JSON(JavaScript Object Notation)에서 직렬화 및 역직렬화하는 기능을 제공합니다. .NET Core 3.1 이상 버전의 런타임에 포함되어 있습니다. 다른 대상 프레임워크의 경우 System.Text.Json NuGet 패키지를 설치해야합니다. 아래 버전에서 지원합니다.
using System.Text.Json;
using System.Text.Encodings.Web;
using System.Text.Unicode;
//System.Text.Json에는 모든 진입점과 기본 형식이 포함되어 있습니다.
문자열 또는 파일에 JSON을 쓰려면 JsonSerializer.Serialize 메서드를 호출합니다.
A. 기본
var dic = new Dictionary<string, string>()
{
{ "name", "jinwoo" },
{ "favoritefodd", "beef" }
};
string jsonString = JsonSerializer.Serialize(dic);
Console.WriteLine(jsonString);
//output :
{"name":"jinwoo","favoritefodd":"beef"}
B. JSON을 보기 좋게 출력
var options = new JsonSerializerOptions
{
//WriteIndented : 사용자 가독성을 위해 JSON의 서식을 지정하는 옵션
WriteIndented = true
};
var dic = new Dictionary<string, string>()
{
{ "Name", "Jinwoo" },
{ "Favoritefodd", "beef" }
};
string jsonString = JsonSerializer.Serialize(dic, options);
Console.WriteLine(jsonString);
//output :
{
"Name": "Jinwoo",
"Favoritefodd": "beef"
}
C. 한글 사용
var options = new JsonSerializerOptions
{
//문자 인코딩을 사용자 지정, BasicLatin : 로마자 기본, HangulSyllables : 한글 음절
Encoder = JavaScriptEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.HangulSyllables),
};
var dic = new Dictionary<string, string>()
{
{ "Name", "진우" },
{ "Favoritefodd", "소고기" }
};
string jsonString = JsonSerializer.Serialize(dic, options);
Console.WriteLine(jsonString);
//output :
{"Name":"진우","Favoritefodd":"소고기"}
D. 개채를 Json
var options = new JsonSerializerOptions
{
Encoder = JavaScriptEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.HangulSyllables),
WriteIndented = true
};
Person person = new Person()
{
Name = "박진우",
Age = DateTime.Now.Year - 1994,
Nickname = new string[] { "원빈", "장동건", "현빈" },
Favoritefood = new List<string>() { "소고기", "돼지고기", "닭고기"},
Birthday = DateTime.Parse("1994-08-09"),
Employed = true
};
string jsonString = JsonSerializer.Serialize(person, options);
Console.WriteLine(jsonString);
//output :
{
"Name": "박진우",
"Age": 28,
"Nickname": [
"원빈",
"장동건",
"현빈"
],
"Favoritefood": [
"소고기",
"돼지고기",
"닭고기"
],
"Birthday": "1994-08-09T00:00:00+09:00",
"Employed": true
}
JSON을 역직렬화하는 일반적인 방법은 하나 이상의 JSON 속성을 나타내는 속성 및 필드가 있는 클래스를 만들고 문자열 또는 파일에서 역직렬화 메서드를 호출합니다(JsonSerializer.Deserialize). 클래스에 표시되지 않는 JSON 속성은 무시됩니다.
A. 역직렬화
string jsonString = @"
{
""Name"": ""박진우"",
""Age"": 28,
""Nickname"": [
""원빈"",
""장동건"",
""현빈""
],
""Favoritefood"": [
""소고기"",
""돼지고기"",
""닭고기""
],
""Birthday"": ""1994-08-09T00:00:00+09:00"",
""Employed"": true
}
";
Person Person = JsonSerializer.Deserialize<Person>(jsonString);
Console.WriteLine(Person.Name);
Console.WriteLine(Person.Age);
Console.WriteLine(Person.Birthday);
Console.WriteLine(Person.Employed);
//output :
박진우
28
1994-08-09 00:00:00 +09:00
True
역직렬화하려는 JSON이 있고 역직렬화할 클래스가 없는 경우 또는 수신하는 JSON에 고정된 스키마가 없는 경우 해당 스키마가 포함된 내용을 알기 위해 검사할때 사용할 수 있습니다.
using System.Text.Json.Nodes;
string jsonString = @"
{
""Name"": ""박진우"",
""Age"": 28,
""Nickname"": [
""원빈"",
""장동건"",
""현빈""
],
""Favoritefood"": [
""소고기"",
""돼지고기"",
""닭고기""
],
""Birthday"": ""1994-08-09T00:00:00+09:00"",
""Employed"": true
}
";
JsonNode jsonNode = JsonNode.Parse(jsonString);
Console.WriteLine(jsonNode.ToJsonString(options));
Console.WriteLine(jsonNode["Name"]);
Console.WriteLine(jsonNode["Age"]);
Console.WriteLine(jsonNode["Nickname"]);
Console.WriteLine(jsonNode["Favoritefood"].ToJsonString(options));
Console.WriteLine(jsonNode["Birthday"]);
Console.WriteLine(jsonNode["Employed"]);
//output :
박진우
28
[
"\uC6D0\uBE48",
"\uC7A5\uB3D9\uAC74",
"\uD604\uBE48"
]
[
"소고기",
"돼지고기",
"닭고기"
]
1994-08-09T00:00:00+09:00
true
[.NET] .NET sdk 버전 확인 (0) | 2022.10.10 |
---|---|
[.NET] JsonSerializer.Serialize 한글 적용 (0) | 2022.10.10 |
[.NET] .NET 통합: .NET 5에 대한 Microsoft의 계획 (1) | 2022.10.08 |
[.NET] NLog 사용 for .NET and .NET Core (0) | 2022.09.24 |
[.NET] 일정 시간이 지난 파일 삭제 (0) | 2022.09.22 |
댓글 영역