[C#] HTTP로 JSON을 받아와서 ListView에 표시하는 샘플

[C#] HTTP로 JSON을 받아와서 ListView에 표시하는 샘플

스크린샷 2014-05-19 오후 8.15.01

이 회사 오기 전에 며칠 공부했었던 것 같은데, 당연히 다 까먹었고, 오늘의 목표는 이거다.

 

스크린샷 2014-05-19 오후 8.17.46

새 프로젝트를 만든다. Visual C#과 WPF를 선택한다.

 

 

 

레이아웃 그리기

스크린샷 2014-05-19 오후 8.25.26

 

DisplayMemberBinding=”{Binding Subject}” 이 부분이 데이터가 연결되는 부분이다. 설정하는 화면이 따로 있을 것 같은 느낌이지만, 오늘은 맨땅에 헤딩이라 패스한다.

 

 

 

HTTP GET으로 JSON 호출하기

먼저 JSON 라이브러리를 받아와야 한다. 이게 제일 유명한 것 같다. http://james.newtonking.com/json

 

받은 파일을 압축해제하면 Bin – Netxx – Newtonsoft.Json.dll 이 나온다.

 

프로젝트에 dll 을 추가한다.

스크린샷 2014-05-19 오후 8.37.04 스크린샷 2014-05-19 오후 8.37.41

 

 

Refresh 버튼을 누르면 http로 json 을 가져온다.

 

 

Issue 클래스 만들기

스크린샷 2014-05-19 오후 8.44.27 스크린샷 2014-05-19 오후 8.44.49

Issue.cs 클래스를 추가한다.

 

 

 

JSON Parse

받아 온 json 문자열을 파싱하고, ItemsResources 에다 넣어주면 된다.

 

http://www.redmine.org/issues.json

스크린샷 2014-05-19 오후 8.49.53

요렇게 생겼다.

 

 

 

Button Click 연결하기

이제 남은 건 버튼을 클릭했을 때 함수만 호출시켜주면 된다.

 

 

전체 소스

 

 

Async

아니 요새 누가 이런 네트웍 작업에 async를 안쓰겠냐 ㅋㅋ

async void 로 바꾼다.

 

http://stackoverflow.com/questions/202481/how-to-use-httpwebrequest-net-asynchronously 여기를 참고해서 HttpWebRequest로 해봤는데, ItemsSource에 적용할 때 System.InvalidOperationException 가 나더라. 아마 request가 작업 중에 리스트뷰를 건들이면 안되는 것 같다.

 

 

이게 필요한데, 안되면  저 위에 Newtonsoft.Json.dll 추가하는 식으로 하면 된다.

 

 

https://github.com/susemi99/ListView-Sample