posted by 방랑군 2012. 1. 7. 15:41

출처 :  http://najsulman.tistory.com/591

 휴우~ 각고의 노력끝에 드뎌 성공~!!!


휠자가 하려고 했던 것은 다음과 같다.
1. ActiveX에서 마우스 클릭 시 이벤트를 ClientScript에 통지!!
2. 통지 받으면 Ajax로 서버딴에 DB질의를 요청
3. 서버쪽에서는 웹서비스로 DB에 질의 요청 후 받은 데이터를 JSON으로 변환
4. 기다리고 있던 ClientScript에서는 JSON으로 질의에 대한 응답을 받음

현재 설명하려고 하는 내용은 Ajax로 서버딴에 DB질의 요청 및 받은 데이터를 JSON으로 변환하는 것이에용

ClientScript에서 Ajax로 질의 요청 하는 Ajax구문
<script type ="text/javascript" language="javascript" for="NVS" EVENT="RcvSelectedCamera(CameraCode)">
$.ajax({
type: "post",
url: "Tmp.asmx/HelloPreset",
data: "{" + CameraCode + "}",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){
alert('success - ' + data.d);
},
error: function(result){
alert('error - ' + result.status + ' ' + result.statusText);
}

});

</script>


JSON으로 변환
- 웹서비스쪽에서 JSON으로 변환해줌

DataSet을 JSON으로 변환해줄 클래스 정의


namespace ICSService
{
public class DataSetConverter : JavaScriptConverter
{
public override IEnumerable<Type> SupportedTypes
{
//Define the DataTable as a supported type.
get { return new ReadOnlyCollection<Type>(new List<Type>(new Type[] { typeof(DataSet) })); }
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
Dictionary<string, object> dtDic = new Dictionary<string, object>();
DataSet ds = obj as DataSet;
foreach (DataTable dt in ds.Tables)
{
// Create the representation.
Dictionary<string, object> rowDic = new Dictionary<string, object>();
int i = 0;
foreach (DataRow row in dt.Rows)
{
//Add each entry to the dictionary.
Dictionary<string, object> colDic = new Dictionary<string, object>();
foreach (DataColumn col in row.Table.Columns)
{
colDic.Add(col.ColumnName, row[col]);
}
rowDic.Add("row" + (i++).ToString(), colDic);
}
dtDic.Add(dt.TableName, rowDic);
}
return dtDic;
}
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
if (dictionary == null)
throw new ArgumentNullException("dictionary");
if (type == typeof(DataTable))
{
// Create the instance to deserialize into.
DataTable list = new DataTable();
// Deserialize the ListItemCollection's items.
ArrayList itemsList = (ArrayList)dictionary["Rows"];
for (int i = 0; i < itemsList.Count; i++)
list.Rows.Add(serializer.ConvertToType<DataRow>(itemsList[i]));
return list;
}
return null;
}
}
}
DataSetConverter 클래스의 사용

[WebMethod]
public string SelectPresetByCameraCode_Web(string[] CameraCode)
{
DataSet ds = (DataSet)XmlHelper.ExcuteXml(Server.MapPath(PRESET_XML), "SelectPresetByCameraCode_Web", CameraCode);
JavaScriptSerializer jss = new JavaScriptSerializer();
DataSetConverter dsc = new DataSetConverter();
IDictionary<string, object> retVal = dsc.Serialize(ds, jss);
string result = jss.Serialize(retVal);
return result;
}


'PP > JSON' 카테고리의 다른 글

JSON 의 eval() 함수 사용의 문제  (0) 2012.01.09
JSON Text를 JSON Object로 변환하기  (0) 2012.01.09
JSON 개요 및 예제  (0) 2012.01.04
DATASET - > JSON  (1) 2012.01.04
JSON.NET  (0) 2012.01.04