C#에서 JSON 다루기(Json.NET)
C#에서 Json.NET의 사용 예제를 정리해보았다. 왜냐면 내가 자꾸 잊어먹기 때문… 계속 업데이트 할 예정이다.
물론 공식 문서가 최고다.
GET parameter 받아오기
string course_no = Request["course_no"];
string haksu_no = Request["haksu_no"];
POST request 받아오기
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
string rawRequest = Request.Form[0];
JObject applyJObj = JObject.Parse(rawRequest);
예시용 Json
// applyJObj
{
"counselHopeTime": [
{
"key": 1,
"date": "20180814",
"time": "03"
},
{
"key": 1533569780046,
"date": "20180807",
"time": "05"
}
],
"subject": {
"life": [],
"etc": ""
},
"problem": "문제다",
"goal": "변화"
}
Object 값 가져오기
string goal = applyData["goal"].ToString();
Object 안의 Object 값 가져오기
string etc = applyData["subject"]["etc"].ToString();
Array 안의 값을 ‘, ‘로 묶어 string으로 만들기
string life = string.Join(", ", JsonConvert.DeserializeObject<List<string>>(applyData["subject"]["life"].ToString()).ToArray());
property 순회하여 Array일 경우 처리
foreach (JProperty property in applyJObj.Properties())
{
if (property.Value.Type == JTokenType.Array) // Array일 경우
{
List<string> listInProperty = JsonConvert.DeserializeObject<List<string>> (property.Value.ToString());
property.Value = string.Join(",", listInProperty.ToArray());
}
}
foreach로 element가 10개 있는 Array 만들기
string[] hopeDateArr = {"0000000000", "0000000000", "0000000000", "0000000000", "0000000000", "0000000000", "0000000000", "0000000000", "0000000000", "0000000000"};
int hopeDateCnt = 0;
foreach(JObject hopeTime in applyData["counselHopeTime"])
{
string dt = hopeTime["date"].ToString();
hopeDateArr[hopeDateCnt] = dt;
hopeDateCnt++;
}
json 만들기
Dictionary로 만들기
string uploadedUrl = "http://whereTheFileWas.com/uploaded/what.jpg"
Dictionary<string, string> location = new Dictionary<string, string>
{
{"location", uploadedUrl}
};
string json = JsonConvert.SerializeObject(location, Formatting.Indented);
불필요한 데이터 전송 줄이기
1개 컬럼만 있는 DataTable을 Array로 바꾸기
예시의 DataTable
은 APPLY_DATE
컬럼 하나만 있는데, 이를 바로 json
으로 바꾸면 불필요한 데이터 전송이 많다.
단순 string
만 전송하기 위해 ArrayList
로 바꿔 보내자.
/* before
[
{
"APPLY_DATE": "20190311"
},
{
"APPLY_DATE": "20190313"
},
{
"APPLY_DATE": "20190314"
}
]
*/
DataTable dt = new DataTable();
DataColumn column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "APPLY_DATE";
dt.Columns.Add(column);
DataRow row1 = dt.NewRow();
row1["APPLY_DATE"] = "20190311";
dt.Rows.Add(row1);
DataRow row2 = dt.NewRow();
row2["APPLY_DATE"] = "20190313";
dt.Rows.Add(row2);
DataRow row3 = dt.NewRow();
row3["APPLY_DATE"] = "20190314";
dt.Rows.Add(row3);
string json = JsonConvert.SerializeObject(dt, Formatting.Indented);
/* after
[
"20190311",
"20190313",
"20190314"
]
*/
ArrayList converted = new ArrayList(dt.Rows.Count);
foreach (DataRow row in dt.Rows)
{
converted.Add(row.ItemArray[0].ToString());
}
string json = JsonConvert.SerializeObject(converted, Formatting.Indented);
Leave a comment