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

+ Recent posts