Post List

2015년 9월 7일 월요일

C# (.Net) 에서 JSON 생성 및 Parsing 하기

최근 제 Blog에서 가장 많이 보는 Posting이 이 글이더군요.
사실 좀 당황했습니다.
왜냐면 저는 현재 JSON for .NET을 사용하지 않고 Newtonsoft.Json을 사용합니다.
그래서 Newtonsoft.Json에 대한 사용법을 Posting 하고, 그 Link를 남기겠습니다.
아래 Link를 누르시면 Newtonsoft.Json에 대한 사용법을 소개하고 있습니다.

http://devluna.blogspot.kr/2016/05/newtonsoftjson-c-net-json-parsing.html

-------------------
C#에서 JSON 을 사용하는 방법은 여러가지가 있습니다.
기본적으로 .NET Framework에서 제공해주는 것만으로도 가능합니다.
하지만 사용하기가 번거로와서 좀 더 편한 Library인 JSON for .NET을 소개해드리고,
간단한 예제Code와 함께 사용법을 설명드리겠습니다.

JSON for .NET

http://sourceforge.net/projects/csjson

위 Link에서 다운로드가 가능합니다.
다운로드 받아서 압축을 풀면

System.Net.Json.dll

파일이 하나 있습니다.

해당 파일을 Project에서 참조하시면 됩니다.

기능은 아래 3가지 정도만 익히시면 업무에 활용이 가능합니다.
더 자세한 기능이 필요하시더라도 위 Link에서 Document로는 가지 마시구요.
가도 설명이 없습니다.
그냥 해당 Object에서 정의로 이동해서 정의된 함수를 살펴보시고, 해당 함수를 한번 이용해 보세요.
문서 같은 자료가 너무 없기 떄문에 그냥 활용해보고 이런 기능이다 라는걸 경험해보는게 훨씬 더 빠릅니다.

1. JSON Object 생성

JsonObjectCollection 의 Instance를 하나 생성하여 JsonObject를 추가하는 방식으로 생성이 가능합니다.
추가하는 JsonObject 로는 String, Numeric ( int, float, double ... ) , 다른 JsonObjectCollection 등을 추가 할 수 있습니다.

JsonObjectCollection col = new JsonObjectCollection();
col.Name = "User";

col.Add(new JsonStringValue("id""Luna"));
col.Add(new JsonStringValue("name""Silver"));
col.Add(new JsonNumericValue("age"19));

JsonObjectCollection col2 = new JsonObjectCollection();

col2.Add(col);
col2.Add(col["age"]);
col2.Add(new JsonStringValue("comment""Hello JSON"));

string strJson = col2.ToString();


2. JSON 형식의 문자열을 이용하여 JsonObject 생성

JsonTextParser를 이용하여 JsonObjectCollection 으로 변환이 가능합니다.

JsonTextParser parser = new JsonTextParser();

JsonObject obj = parser.Parse(strJson);

JsonObjectCollection col = (JsonObjectCollection)obj;


3. JSON Object에서 값을 가져오기

JsonObjectCollection.GetValue() 함수를 이용하여 가져 올 수 있습니다.

string comm = Convert.ToString(col3["comment"].GetValue());

하지만 주의 사항이 있습니다.
가져오는 JSON Object에 Name 값이 있는 경우 Name 값만 string으로 가져오고 내부 Document는 가져 오지 못합니다. (아마 Bug 인듯 합니다.)
그리고 Collection 내에 없는 Field에 대해서 가져오는 것을 시도한 경우 Exception이 발생합니다.
그래서 아래와 같이 함수를 생성하여 사용하는게 좋습니다.

* 위 설명한 것에 대한 전체 예제 Code 입니다.

* 실행 결과

col : "User": {
        "id""Luna",
        "name""Silver",
        "age"19
}
col2 : {
        "User": {
                "id""Luna",
                "name""Silver",
                "age"19
        },
        "age"19,
        "comment""Hello JSON"
}
obj : {
        "User": {
                "id""Luna",
                "name""Silver",
                "age"19
        },
        "age"19,
        "comment""Hello JSON"
}
col3 : {
        "User": {
                "id""Luna",
                "name""Silver",
                "age"19
        },
        "age"19,
        "comment""Hello JSON"
}
comm : Hello JSON

댓글 없음:

댓글 쓰기