C#에서 파일에 JSON 쓰기
이 게시물에서는 C# 프로그래밍 언어를 사용하여 기본 JSON 개체를 구성하고 파일에 쓰는 방법을 배웁니다. 시작하려면 JSON이 무엇인지 확실하게 이해해야 합니다.
JSON 형식
JSON은 JavaScript Object Notation의 약자로 최소한의 데이터를 교환하기 위한 표준입니다. JavaScript 프로그래밍 언어의 일부를 기초로 사용합니다.
JSON은 전체 언어에 구애받지 않는 구조이며 특수 문자를 사용하지 않습니다. 사람들이 JSON으로 읽고 쓰는 것과 컴퓨터가 JSON 데이터를 생성하고 해석하는 것은 간단합니다.
XML의 대안으로 가장 기본적인 데이터 유형에 대한 기본 제공 지원을 제공합니다. JavaScript Object Notation이라는 용어는 JavaScript와 JSON 모두에서 사용되는 구문을 나타냅니다.
텍스트 기반 언어이기 때문에 사용자가 읽기 쉽고 동시에 기계가 해석하기가 더 쉽습니다. 몇 년 전까지만 해도 프로그래머들은 XML에 의존하여 웹 서비스와 같은 다양한 서비스 응용 프로그램 간의 통신을 용이하게 했습니다.
그러나 사용자는 웹 API가 인기를 얻으면서 가능한 대체 데이터 직렬화 표준으로 JSON을 조사하기 시작했습니다.
Json.NET
다운로드 및 설치
데이터를 JSON 형식으로 직렬화하기 위해 .NET Framework에서 제공하는 기본 클래스를 사용하거나 다른 타사 구성 요소를 사용할 수 있습니다. 이 자습서에서는 NewtonSoft
직렬화 라이브러리를 사용하여 JSON 구조를 직렬화합니다.
-
시작하려면 Microsoft Visual Studio 작업 공간을 준비하고
Newtonsoft
패키지를 설치해야 합니다. -
Microsoft Visual Studio를 시작하고 메뉴 모음에서
파일
을 선택한 다음새로 만들기
및프로젝트
옵션을 선택합니다. -
왼쪽에서
Visual C#
을 선택한 다음Console App (.NET Framework)
을 클릭합니다. 적절한 이름을 지정하고 프로젝트를 찾습니다.우리는 그것을
writejsonByZeeshan
이라고 명명했습니다. 이름을 지정한 후확인
을 클릭합니다. -
이제 프로젝트가 생성되었으므로
Json.NET
에 대한 참조를 포함합니다. 이를 위해Solution Explorer
영역을 마우스 오른쪽 버튼으로 클릭하고Manage NuGet Packages for Solution
을 선택합니다. -
Newtonsoft.Json
을 선택한 후 오른쪽 패널에서설치
를 선택합니다. -
다운로드가 완료되면 구성 요소가 설치되고
Json.NET
에 녹색 체크 표시가 나타납니다. -
이제
Solution Explorer
에서 참조로 이동하면Newtonsoft.json
에 대한 참조가 추가되었음을 알 수 있습니다.Newtonsoft.json
이 추가된 후 JSON을 생성할 코드를 구성할 차례입니다.
Json.NET
을 사용하여 파일에 JSON 쓰기
Newtonsoft
에 대한 참조는 이전에 솔루션이 처음 개발되었을 때 포함되었습니다. 이제 JSON을 직렬화하고 생성할 첫 번째 코드 작업을 시작할 때입니다.
기본 JSON 구조로 시작한 다음 코드를 한 줄씩 살펴보고 그 기능을 더 깊이 분석하면서 점점 더 복잡한 구조로 점진적으로 진행해 봅시다. 먼저 프로젝트에 새 클래스를 추가하여 구조를 JSON 파일에 넣는 것으로 시작하겠습니다.
-
시작하려면
Main()
에 다음 라이브러리를 추가합니다.using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks;
-
클래스를 추가하려면
솔루션 탐색기
패널을 마우스 오른쪽 버튼으로 클릭하고추가
를 마우스 왼쪽 버튼으로 클릭한 다음 드롭다운 메뉴에서 클래스를 선택합니다.Student
클래스와 같이 허용 가능한 이름을 지정한 후 마지막 단계는추가
버튼을 클릭하는 것입니다. -
변수 개체를 성공적으로 생성한 후 새 클래스에서 변수 개체 정의를 시작하겠습니다.
Student
클래스에Name
,Rollnum
,Grade
및City
를 포함하고 다음 값을 할당했습니다.class Student { public string Name = "Muhammad Zeeshan"; public int Rollnum = 3227; public string Grade = "A"; public string City = "Islamabad"; }
-
따라서
Main
기능에서s
라는Student
클래스의 인스턴스를 생성합니다.Student s = new Student();
-
그런 다음
JsonConvert.SerializeObject
메서드를 사용하여 방금 지정한 클래스 개체를 JSON 형식으로 변환합니다. 직렬화된 데이터를SerializedJsonResult
라는 문자열 변수에 넣겠습니다.string SerializedJsonResult = JsonConvert.SerializeObject(s);
-
이제 데이터가 JSON 형식으로 직렬화되었으므로 데이터를 저장할 위치를 제공해야 합니다.
jsonpath
라는 문자열 변수가 사용됩니다.string jsonpath = "D:/jsondata/studentdata.json";
-
if
조건을 사용하여 경로가 올바른지 여부를 확인합니다. 경로가 이미 있는 경우 코드는 기존 경로를 삭제하고 새 경로를 만들어 기존 경로를 덮어씁니다.if (File.Exists(jsonpath)) { File.Delete(jsonpath); using (var st = new StreamWriter(jsonpath, true)) { st.WriteLine(SerializedJsonResult.ToString()); st.Close(); } }
-
경로를 사용할 수 없는 경우
else-if
는 새 경로를 만들고 JSON을 파일에 씁니다.else if (!File.Exists(jsonpath)) { using (var st = new StreamWriter(jsonpath, true)) { st.WriteLine(SerializedJsonResult.ToString()); st.Close(); } }
완전한 소스 코드
예제 코드(학생
클래스):
class Student {
public string Name = "Muhammad Zeeshan";
public int Rollnum = 3227;
public string Grade = "A";
public string City = "Islamabad";
}
예제 코드(Main
클래스):
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace writejsonByZeeshan {
class Program {
static void Main(string[] args) {
Student s = new Student();
string SerializedJsonResult = JsonConvert.SerializeObject(s);
string jsonpath = "D:/jsondata/studentdata.json";
if (File.Exists(jsonpath)) {
File.Delete(jsonpath);
using (var st = new StreamWriter(jsonpath, true)) {
st.WriteLine(SerializedJsonResult.ToString());
st.Close();
}
}
else if (!File.Exists(jsonpath)) {
using (var st = new StreamWriter(jsonpath, true)) {
st.WriteLine(SerializedJsonResult.ToString());
st.Close();
}
}
}
}
}
출력:
{"Name":"Muhammad Zeeshan","Rollnum":3227,"Grade":"A","City":"Islamabad"}
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn