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