C#에서 사전을 JSON 문자열로 변환
- JSON 문자열의 기본 구조
-
JsonConvert.SerializeObject()를 사용하여C#에서 사전을 JSON으로 변환 -
맞춤형 기능을 사용하여
C#에서 사전을 JSON으로 변환 -
.NET웹앱용 C#에서 JavaScript 직렬 변환기 사용
그렇다면 C#에서 사전을 만드는 방법은 무엇입니까? C#에서는 먼저 다음과 같이 패키지를 가져옵니다.
using System.Collections.Generic;
그리고 클래스 내 선언된 MAIN 함수 내부에 Dictionary 객체를 선언합니다.
IDictionary<int, double> cgpas = new IDictionary<int, dictionary>();
이제 Dictionary를 JSON으로 변환하는 방법을 살펴보겠습니다.
JSON 문자열의 기본 구조
JSON이란 무엇입니까? JSON은 JavaScript Object Notation을 의미합니다.
값이 키에 매핑되는 일종의 구조를 사용합니다. 따라서 매장에 직원 집합을 저장하려는 경우 다음과 같이 진행할 수 있습니다.
{"employees" : {{"id" : 1 , "name" : "John"}, {"id" : 2, "name" : "Kevin"}}
이제 위에 주어진 예는 약간 복잡할 수 있습니다. 하지만 분해해 봅시다.
JSON의 구조에 대한 통찰력을 얻을 수 있고 나중에 언급된 변환이 어떻게 발생하는지 더 잘 분석할 수 있기 때문에 우리는 먼저 JSON을 정의합니다.
그래서 우리는 KEY인 "Employees"로 시작합니다. 그런 다음 중괄호 뒤에 2 더 많은 중괄호(닫기 및 열기)가 표시됩니다.
중괄호 인클로저를 세트라고도 합니다. 2개의 다른 직원 JOHN 및 KEVIN만 정의했기 때문에 여기에는 키와 값이 포함됩니다. 따라서 두 세트만 정의됩니다.
이들은 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]);
여기에서 ID는 KEY를 나타내는 대괄호로 묶여 있습니다. 이제 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.Json의 JsonConverter가 아니라 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를 사용했음을 알 수 있습니다. IDICTIONARY는 DICTIONARY에서 상속되고 몇 가지 더 편리한 확장 기능이 있으므로 계속 진행했습니다.
그러나 기본 기능은 동일하게 유지됩니다. 함수 내에서 DICTIONARY의 KEY를 매핑하고 대괄호를 사용하여 값이 문자열 내부에 있어야 하는 방식을 표현하여 문자열 형식을 지정합니다.
{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를 인쇄할 수 있습니다.
웹 버전에서 코드를 약간 가지고 놀아야 할 수도 있습니다. 때로는 콘솔 버전이 작동하지 않고 완전히 호환되지 않습니다.
따라서 사용 중인 함수, 어셈블리 및 지시문이 실행 중인 버전과 일치하는지 확인하십시오.
귀하의 적합성에 대해 위에 제공된 코드를 수정할 수 있습니다. 읽어 주셔서 감사합니다!
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