-
Json.NET을 사용해보자!Programming/C# 2019. 4. 7. 17:58
안녕하세요. Teemol입니다.
오늘은 Json.NET의 사용법을 알아보겠습니다.
Json.NET이란? .Net에서 Json을 처리하는 라이브러리입니다.
먼저 Json.Net을 사용하려면 NuGet을 사용해 Newtonsoft.Json을 설치해야 합니다.
패키지 관리자 콘솔에서는 Install-Package Newtonsoft.Json로 설치할 수 있습니다.
Json을 처리하기 위한 라이브러리기 때문에 당연히 Json이 필요하겠죠!?
먼저 아래와 같이 제이슨을 만들겠습니다.
TestJson.json
12345678910111213{"TestJson": {"DataStr": "Data","DataInt": 100,"DataArry": ["Arry1", "Arry2", "Arry3"]}}cs 문자, 숫자, 배열 형식의 데이터를 가지고 있는 Json입니다!
먼저 Key 값을 이용하여 데이터를 가져오는 방법입니다.
1234567891011121314151617181920212223static void Main(string[] args){using (StreamReader r = new StreamReader("TestJson.json")){string json = r.ReadToEnd();ReadJson(json);}}static void ReadJson(string jsonStr){JObject json = JObject.Parse(jsonStr);JToken testJson = json["TestJson"];string dataStr = testJson.Value<string>("DataStr");//dataStr = "Data"int? dataInt = testJson.Value<int?>("DataInt");//dataInt = 100string[] dataArry = testJson.Value<JArray>("DataArry").Values<string>().ToArray();//dataArry[0] = "Arry1", dataArry[1] = "Arry2", dataArry[2] = "Arry3"}cs 위와 같이 키값으로 접근해서 데이터를 가져올 수 있습니다.
이때 주의해야 할 점은, Json에 접근할 때 데이터가 배열 형식이 아닌 경우 Index로 접근할 수 없다는 점입니다.
쉽게 말하면 샘플 제이슨에서는 인덱스로 접근할 수 있는 항목은 DataArry의 하위 항목뿐입니다.
TestJson의 하위 항목은 DataStr, DataInt, DataArry는 해당 이름으로만 접근이 가능하고 인덱스로는 접근할 수 없습니다.
ex) testJson[0] => X, testJson["DataStr"] => O
혹은 반복문을 이용하여 데이터를 가져올 수 있습니다.
123456789101112131415161718192021222324252627282930313233343536373839static void Main(string[] args){using (StreamReader r = new StreamReader("TestJson.json")){string json = r.ReadToEnd();ReadJson(json);}}static void ReadJson(string jsonStr){JObject json = JObject.Parse(jsonStr);foreach(var data in json["TestJson"]){JProperty jProperty = data.ToObject<JProperty>();switch (jProperty.Name){case "DataStr":System.Console.WriteLine(jProperty.Value);//Databreak;case "DataInt":System.Console.WriteLine(jProperty.Value);//100break;case "DataArry":foreach(var arry in jProperty.Value)System.Console.WriteLine(arry);//Arry1//Arry2//Arry3break;}}}cs 지금까지 저는 Json 데이터를 읽을 때 위와 같이 반복 문과 키값을 이용해서 값을 읽고, 처리하였습니다.
그런데 얼마 전 아는 분이 JsonConvert를 사용하는 걸 봤는데 제가 원시인인 줄 알았네요...
이제 JsonConvert를 사용해서 데이터를 가져오겠습니다!
먼저 Json의 내용을 담을 클래스를 만듭니다.
123456class TestJson{public string DataStr;public int DataInt;public List<string> DataArry;}cs 그리고 아래와 같이 JsonConvert.DeserializeObject를 사용하면
1234567891011121314static void Main(string[] args){using (StreamReader r = new StreamReader("TestJson.json")){string json = r.ReadToEnd();ReadJson(json);}}static void ReadJson(string jsonStr){JObject json = JObject.Parse(jsonStr);TestJson testJson = JsonConvert.DeserializeObject<TestJson>(json["TestJson"].ToString());}cs testJson에 값이 들어간 걸 확인할 수 있습니다.
굉장히 신기하네요!
아래와 같이 하면 반대로 객체를 Json으로 만들 수도 있습니다.
123456789101112131415static void Main(string[] args){TestJson testJson = new TestJson();testJson.DataStr = "111";testJson.DataInt = 222;testJson.DataArry = new List<string>();testJson.DataArry.Add("Arr1");testJson.DataArry.Add("Arr2");string json = JsonConvert.SerializeObject(testJson);//{"DataStr":"111","DataInt":222,"DataArry":["Arr1","Arr2"]}}cs 정말 간단하죠?
이렇게 편한 걸 모르고 지금까지 하나하나 읽어서 클래스에 담다니 정말 멍청했네요 ㅠ
이제부터라도 자주 사용해야겠습니다.
여기까지, 간단하게 Json.NET의 사용법을 알아봤습니다.
감사합니다.
'Programming > C#' 카테고리의 다른 글
[WPF] WindowChrome ! (0) 2020.03.20 [WPF] ListView에 UserControl 넣기 (0) 2020.03.20 [WPF] 의존 프로퍼티!? (0) 2019.03.08 [WPF] ListView에 데이터를 바인딩 해보자! (0) 2019.03.07 데이터처리를 쿼리로!? (1) (0) 2019.03.05