관세청에서 제공하는 컨테이너 JSon 정보를 C#의 DataTable로 변환 가능성 여부를 검토해보았고 간단하게 작업을 해보았습니다.
참고
- 컨테이너 정보 조회 URL : https://unipass.customs.go.kr/csp/myc/bsopspptinfo/cscllgstinfo/ImpCargPrgsInfoMtCtr/retrieveCntrBrkd.do?cargMtNo= 화물관리번호
작업된 소스 코드를 올려봅니다.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace JsonSample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void simpleButton1_Click(object sender, EventArgs e)
{
//Web Client로 JSon String 값을 받아서 처리함.
System.Net.WebClient web = new System.Net.WebClient();
web.Encoding = Encoding.UTF8;
String sData = web.DownloadString("https://unipass.customs.go.kr/csp/myc/bsopspptinfo/cscllgstinfo/ImpCargPrgsInfoMtCtr/retrieveCntrBrkd.do?cargMtNo=16SNKo1150i0008");
// DataTable obj = ToJsonObject<DataTable>(sData);
DataTable dt = JsonStringToDataTable(sData);
gridControl1.DataSource = dt.DefaultView;
}
//구글링해서 처리한 값..물론 JSon Data 관련한 라이브러리가 있지만 다른 방법을 검토해서 처리해보았습니다.
public DataTable JsonStringToDataTable(string jsonString)
{
DataTable dt = new DataTable();
string[] jsonStringArray = Regex.Split(jsonString.Replace("[", "").Replace("]", ""), "},{");
List<string> ColumnsName = new List<string>();
foreach (string jSA in jsonStringArray)
{
string[] jsonStringData = Regex.Split(jSA.Replace("{", "").Replace("}", ""), ",");
foreach (string ColumnsNameData in jsonStringData)
{
try
{
int idx = ColumnsNameData.IndexOf(":");
string ColumnsNameString = ColumnsNameData.Substring(0, idx - 1).Replace("\"", "");
if (!ColumnsName.Contains(ColumnsNameString))
{
ColumnsName.Add(ColumnsNameString);
}
}
catch (Exception ex)
{
throw new Exception(string.Format("Error Parsing Column Name : {0}", ColumnsNameData));
}
}
break;
}
foreach (string AddColumnName in ColumnsName)
{
dt.Columns.Add(AddColumnName);
}
foreach (string jSA in jsonStringArray)
{
string[] RowData = Regex.Split(jSA.Replace("{", "").Replace("}", ""), ",");
DataRow nr = dt.NewRow();
foreach (string rowData in RowData)
{
try
{
int idx = rowData.IndexOf(":");
string RowColumns = rowData.Substring(0, idx - 1).Replace("\"", "");
string RowDataString = rowData.Substring(idx + 1).Replace("\"", "");
nr[RowColumns] = RowDataString;
}
catch (Exception ex)
{
continue;
}
}
dt.Rows.Add(nr);
}
return dt;
}
}
}
'IT > Visual Studio' 카테고리의 다른 글
[C#] 인터넷 날짜와 시간 가져오기 (0) | 2019.03.26 |
---|---|
엔티티프레임워크에서 linq 형 변환 방법 (0) | 2019.02.14 |
[C#] RS232 통신 샘플 코드 (0) | 2018.07.27 |
[C#] USB 통신 샘플 소스 (0) | 2018.07.26 |
[VisualStudio] 사용자 지정 이벤트 로그를 만들 수 있는 권한 부여 (0) | 2018.04.10 |
[Visual Studio] 강력키 생성방법 (0) | 2018.04.07 |
[Visual Studio] vs2005설치후 vs2003설치시 주의할 점 (0) | 2018.04.03 |
[C#] 구성 요소에서 COM+ 트랜잭션을 사용하는 방법 (0) | 2018.04.01 |