본문 바로가기
프로그래밍

[Asp.net] Json / JQuery (Ajax)/ Asp.net 3가지를 연동하여 데이터 가져오기

by 건우아빠유리남편 2011. 10. 21.
반응형

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

휠자가 하려고 했던 것은 다음과 같다.
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;
        }



 






 

반응형

댓글