방명록
- C# #26 JSON2023년 09월 01일 19시 32분 13초에 업로드 된 글입니다.작성자: noun06
What
- JSON(JavaScript Object Notation)은 데이터 교환과 저장을 위한 경량의 데이터 형식임. 주로 텍스트 형식으로 표현되며 데이터를 구조화하고 표현하는데 사용됨.
When
- 데이터 교환: C# 어플리케이션과 다른 시스템 혹은 서비스 간 데이터 교환에 사용됨. 웹 API와의 인터렉션, 외부 서비스와 통신, 데이터베이스와의 데이터 교환 등의 경우에 JSON이 사용됨.
- 구성 정보 저장: 웹 어플리케이션의 설정 정보, 데이터베이스 연결 문자열, 어플리케이션 동작 설정 등을 JSON 파일로 저장하여 관리할 수 있음.
- 서버-클라이언트 통신: C# 웹 앱에서 클라이언트와 서버 간에 데이터를 주고받을 때, 클라이언트 측에서 JSON을 사용하여 데이터를 요청하고 서버에서 JSON 형식으로 응답함.
Why
- 가독성과 간결성: 텍스트 기반으로 작성되며 데이터가 키-값 쌍 형식으로 구성되어 데이터가 어떻게 구조화되었는지 명확하게 파악할 수 있음.
- 플랫폼 독립성:JSON은 어떤 프로그래밍 언어나 플랫폼에서도 사용할 수 있는 형식으로 서로 다른 시스템 간 데이터를 교환할 때 사용할 수 있음.
- 유연성: JSON은 중첩된 구조를 가질 수 있으며 사용자 정의 데이터 형식을 정의하고 확장할 수 있는 유연성을 제공함.
How
- 데이터의 구조 정의: 데이터를 JSON으로 표현하기 위해 데이터 구조를 정의함. JSON은 키-값 쌍으로 구성되어 중괄호 { }로 객체를 대괄호[ ]로 배열을 나타냄.
public class AppSettings { public string ApiKey { get; set; } public string DatabaseConnection { get; set; } }
- 직렬화(Serialization): 개체나 데이터 구조를 JSON 문자열로 변환하는 과정. System.Text.Json 또는 Newtonsoft.Json 등의 JSON 라이브러리를 활용.
using Newtonsoft.Json; using System.IO; // 설정 정보를 객체로 생성 var settings = new AppSettings { ApiKey = "my_api_key", DatabaseConnection = "my_database_connection_string" }; // JSON으로 직렬화하고 파일에 저장 string json = JsonConvert.SerializeObject(settings); File.WriteAllText("appsettings.json", json);
- 역직렬화(Deserialization): JSON 문자열을 다시 C# 개체나 데이터 구조로 변환하는 과정. 직렬화된 JSON문자열을 역직렬화하여 사용.
using Newtonsoft.Json; // JSON 파일에서 데이터 읽어오기 string json = File.ReadAllText("appsettings.json"); // JSON을 역직렬화하여 설정 정보 객체로 변환 AppSettings settings = JsonConvert.DeserializeObject<AppSettings>(json); // 설정 정보 사용 Console.WriteLine($"API Key: {settings.ApiKey}"); Console.WriteLine($"Database Connection: {settings.DatabaseConnection}");
코드 분석
C# 팀과제에서 사용된 JsonUtility 클래스의 주요 구성 요소와 작동 방식 분석을 진행함. 이 클래스를 통해 JSON 데이터를 파일로 저장하고 로드하는 작업을 간편하게 처리할 수 있으며 게임의 설정, 데이터, 사용자 프로필 등을 저장하고 관리할 수 있었음.
using System.Text.Json; public class JsonUtility { // 경로를 저장할 기본 경로 static readonly string basePath = Directory.GetParent(Environment.CurrentDirectory).FullName;
- System.Text.Json 네임스페이스는 JSON 직렬화 및 역직렬화를 위한 클래스들을 포함하고 있음.
- JsonUtility 클래스는 JSON 데이터를 저장하고 로드하는 메서드를 제공함. 클래스 내 basePath라는 문자열을 정의하여 JSON 파일이 저장될 기본 경로를 설정함. 기본 경로는 현재의 상위 디렉토리로 세팅.
public static void Save<T>(T t, string name) where T : class { string filePath = @$"{basePath}\{name}.json"; string json = JsonSerializer.Serialize(t); File.WriteAllText(filePath, json); }
- Save 메서드는 제네릭으로 정의되었으며 객체 t를 JSON 형식으로 직렬화하고, 지정된 이름인 name 과 함께 지정된 파일 경로에 저장됨.
- JsonSerializer.Serailize를 활용하여 객체를 JSON 문자열로 변환하고 File.WriteAllText를 통해 파일에 쓰게함.
public static T? Load<T>(string name) where T : class { string filePath = $@"{basePath}\{name}.json"; if (!File.Exists(filePath)) { return null; } else { string json = File.ReadAllText(filePath); T t = JsonSerializer.Deserialize<T>(json); if (t == null) { return null; } else { return t; } } }
- Load 메서드는 주어진 이름 name을 가진 JSON 파일을 로드하고 파일이 존재하지 않으면 null을 반환함.
- 파일이 존재하는 경우 파일 내용을 읽고 JSON 역직렬화를 수행하여 객체로 변환하고 객체를 반환함.
- JsonSerializer.Deserialize를 통해 JSON 문자열을 객체로 역직렬화함.
다음글이 없습니다.이전글이 없습니다.댓글