C#에서 사전을 JSON 문자열로 변환

Bilal Shahid 2023년10월12일
  1. JSON 문자열의 기본 구조
  2. JsonConvert.SerializeObject()를 사용하여 C#에서 사전을 JSON으로 변환
  3. 맞춤형 기능을 사용하여 C#에서 사전을 JSON으로 변환
  4. .NET 웹앱용 C#에서 JavaScript 직렬 변환기 사용
C#에서 사전을 JSON 문자열로 변환

그렇다면 C#에서 사전을 만드는 방법은 무엇입니까? C#에서는 먼저 다음과 같이 패키지를 가져옵니다.

using System.Collections.Generic;

그리고 클래스 내 선언된 MAIN 함수 내부에 Dictionary 객체를 선언합니다.

IDictionary<int, double> cgpas = new IDictionary<int, dictionary>();

이제 DictionaryJSON으로 변환하는 방법을 살펴보겠습니다.

JSON 문자열의 기본 구조

JSON이란 무엇입니까? JSON은 JavaScript Object Notation을 의미합니다.

값이 키에 매핑되는 일종의 구조를 사용합니다. 따라서 매장에 직원 집합을 저장하려는 경우 다음과 같이 진행할 수 있습니다.

{"employees" : {{"id" : 1 , "name" : "John"}, {"id" : 2, "name" : "Kevin"}}

이제 위에 주어진 예는 약간 복잡할 수 있습니다. 하지만 분해해 봅시다.

JSON의 구조에 대한 통찰력을 얻을 수 있고 나중에 언급된 변환이 어떻게 발생하는지 더 잘 분석할 수 있기 때문에 우리는 먼저 JSON을 정의합니다.

그래서 우리는 KEY"Employees"로 시작합니다. 그런 다음 중괄호 뒤에 2 더 많은 중괄호(닫기 및 열기)가 표시됩니다.

중괄호 인클로저를 세트라고도 합니다. 2개의 다른 직원 JOHNKEVIN만 정의했기 때문에 여기에는 키와 값이 포함됩니다. 따라서 두 세트만 정의됩니다.

이들은 KEY EMPLOYEES라는 더 큰 세트로 묶여 있습니다. 따라서 이제 EMPLOYEES 태그를 호출하는 경향이 있는 경우 이 집합을 값으로 받습니다.

JsonConvert.SerializeObject()를 사용하여 C#에서 사전을 JSON으로 변환

방금 초기화한 CGPA 사전에 몇 가지 값을 추가하는 것으로 시작하겠습니다.

cgpas.Add(1, 3.4);
cgpas.Add(2, 3.13);
cgpas.Add(3, 3.01);

그리고 ID 2의 값을 얻으려면 다음과 같이 PRINT 문을 호출할 수 있습니다.

Console.WriteLine("The CGPA of ID 2 is: " + cgpas[2]);

여기에서 IDKEY를 나타내는 대괄호로 묶여 있습니다. 이제 JsonConvert 호출을 사용하여 변환해 보겠습니다.

string js = JsonConvert.SerializeObject(cgpas);

이 코드를 실행하기 전에 NewtonSoft.JSON을 다운로드했는지 확인하십시오. 그렇지 않은 경우 해당 웹 사이트로 이동하거나 Visual Studio에서 작업하는 경우 Nuget Packages로 이동하여 NewtonSoft.JSON을 설치하여 오류를 방지하십시오.

이제 변환된 문자열을 여기에 쉽게 인쇄해 보겠습니다.

Console.WriteLine("The CGPAs are: " + js);

그리고 출력은 다음과 같습니다.

The CGPAs are: {"1":3.4,"2":3.13,"3":3.01}

SerializeObject 정의를 찾을 수 없으면 System.Text.JsonJsonConverter가 아니라 JsonConvert 클래스에서 호출하는지 확인하십시오. NewtonSoft.JSON의 설치도 확인하십시오.

맞춤형 기능을 사용하여 C#에서 사전을 JSON으로 변환

사전을 가져와 JSON 문자열로 변환하는 함수를 구현하는 또 다른 솔루션을 살펴보겠습니다. 나중에 필요에 맞게 수정할 수 있지만 계속해서 IDICTIONARY CGPAS에 사용하겠습니다.

static string MyDictionaryToJson(IDictionary<int, double> dict) {
  var x = dict.Select(d => string.Format("\"{0}\": {1}", d.Key, string.Join(",", d.Value)));
  return "{" + string.Join(",", x) + "}";
}

자, 무슨 일이죠? 음, 사전을 매개변수로 전달합니다.

DICTIONARY가 아닌 IDICTIONARY를 사용했음을 알 수 있습니다. IDICTIONARYDICTIONARY에서 상속되고 몇 가지 더 편리한 확장 기능이 있으므로 계속 진행했습니다.

그러나 기본 기능은 동일하게 유지됩니다. 함수 내에서 DICTIONARYKEY를 매핑하고 대괄호를 사용하여 값이 문자열 내부에 있어야 하는 방식을 표현하여 문자열 형식을 지정합니다.

{1} 주위의 대괄호는 값을 단순히 숫자 또는 문자열로 매핑합니다. 그러나 더 표현력 있고 복잡하게 만드는 경향이 있는 경우 {[1]}와 같은 대괄호를 추가하여 작동하게 만들 수 있습니다.

이렇게 하면 대괄호 안에 값이 인쇄됩니다. 나머지는 적절한 형식의 문자열을 반환합니다.

이제 MAIN 함수 내에서 동일한 호출을 수행합니다.

string js = MyDictionaryToJson(cgpas);

Console.WriteLine("The CGPAs are: " + js);

출력:

The CGPAs are: {"1": 3.4,"2": 3.13,"3": 3.01}

.NET 웹앱용 C#에서 JavaScript 직렬 변환기 사용

C#을 핵심으로 사용하는 웹 응용 프로그램을 사용하고 있다고 가정합니다. 이 경우 LIST 구조를 따라 개체를 정의한 다음 JavaScriptSerializer() 함수를 사용하여 문자열로 변환하는 것이 좋습니다.

컴파일하는 동안 구문 오류를 방지하려면 아래에 정의된 네임스페이스를 사용하십시오.

using System.Collections.Generic;
using System.Text.Json;

그런 다음 CGPA 목록을 작성해 보겠습니다.

var cgpas = new List<int, double>();
cgpas.Add(new CGPA() { ID = 1, CGP = 3.4 });
cgpas.Add(new CGPA() { ID = 2, CGP = 3.13 });
cgpas.Add(new CGPA() { ID = 3, CGP = 3.01 });

물론 인스턴스화할 CGPA 클래스도 정의해야 합니다.

public class CGPA {
  public int ID { get; set; }
  public double CGP { get; set; }
}

그런 다음 다음과 같이 문자열로 변환할 수 있습니다.

var serializer = new JavaScriptSerializer();
var serializedResult = serializer.Serialize(cgpas);

초기화된 LIST에서 형식화된 문자열인 serializedResult를 인쇄할 수 있습니다.

웹 버전에서 코드를 약간 가지고 놀아야 할 수도 있습니다. 때로는 콘솔 버전이 작동하지 않고 완전히 호환되지 않습니다.

따라서 사용 중인 함수, 어셈블리 및 지시문이 실행 중인 버전과 일치하는지 확인하십시오.

귀하의 적합성에 대해 위에 제공된 코드를 수정할 수 있습니다. 읽어 주셔서 감사합니다!

작가: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

관련 문장 - Csharp Dictionary