Json.net이란,
jackson과 gson처럼 object를 json 형태로 바꿔주고 json을 object로 바꿔주는 라이브러리를 말합니다.
다운은 https://www.newtonsoft.com/json 이곳에서 할 수 있습니다. 또는 NuGet패키지로 다운받으시면 됩니다.
Json Object를 만드는것은 다운로드링크에도 잘 나와있기 때문에
이번 포스트에는 Json Array를 받아서 Objcect로 바꾸는 예제를 보겠습니다.
JsonArray를 던지면 결과값으로 JsonArray가 return된다 가정하겠습니다.
사용법
우선
1 2 3 | using Newtonsoft.Json.Linq; using Newtonsoft.Json; | cs |
를 추가해줍니다.
1. DataTable -> Object -> jsonArray
본 예제에서는 파라미터로 DataTable을 받아서 시작하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | private string Dt2Json(DataTable dt) { // DataTable -> List -> Object List<Obj> lisObj = new List<Obj>(); for (int i = 0; i < dt.Rows.Count; i++) { Obj Obj = new Obj(); //필수값 Obj.code1 = dt.Rows[i]["code1"].ToString(); Obj.code2 = dt.Rows[i]["code2"].ToString(); lisObj.Add(Obj); } return JsonConvert.SerializeObject(lisObj.ToArray()); } | cs |
핵심은 17줄 return절이겠죠? ㅎㅎ
2. JsonArray -> List
JsonObject를 받을때는 DeSerializeObject이 되는걸로 아는데 Array를 받을때는 다른 방법을 사용해야합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | private List<Obj> ResJson2List(string Msg) { List<Obj> lis_Obj = new List<Obj>(); JArray jArray = JArray.Parse(Msg); foreach (JObject obj in jArray.Children<JObject>()) { Obj Obj = new Obj(); foreach (JProperty prop in obj.Properties()) { if(prop.Name == "code1") { Obj.code1 = prop.Value.ToString(); } else if(prop.Name == "code2") { Obj.code2= prop.Value.ToString(); } else if(prop.Name == "code3") { Obj.code3 = prop.Value.ToString(); } } lis_Obj.Add(Obj); } return lis_Obj; } | cs |
설명을 하자면 파라미터는 Json Array가 넘어온다 가정합니다.
내부자료형은 차례대로 JArray > JObject > JProperty > JToken로 구현되어있습니다.
JArray.Parse(Msg)를 통해서 JsonContainer에 담습니다.
그리고 jArray.Childeren<JObject>()의 길이만큼 돌면서 JProperty를 찾습니다.
11줄에서는 각 JsonArray에 담긴 원소갯수만큼 for문을 돌기때문에 prop.Name과 prop.Value를 이용하여 원소에 순차적으로 접근할수 있습니다.
그리고 마지막으로 각 객체에 대한 list로 담아서 return해주면 됩니다.
제가 포스팅한것보다 더 좋은 방법있으시면 댓글달아주시면 감사하겠습니다!
'머신러닝 > 스터디 정리' 카테고리의 다른 글
상관계수 (0) | 2018.08.16 |
---|---|
PCA (0) | 2018.08.14 |
정규분포 표준화 (0) | 2018.08.13 |
Aprior 알고리즘 (0) | 2018.08.12 |
K-means 알고리즘 (0) | 2018.08.12 |