재우니의 블로그



.NET 3.5 (or the MS AJAX 1.0 library) 를 가지고 개발을 한다면, 
System.Web.Script.Serialization.JavascriptSerializer 를 이용하여 JSON 형식의 데이터를 가져올 수 있습니다. 


하지만.!! DataTable 과 DataSet 에 직접적인 JSON serialization 이 제공하지 않습니다. 따라서 이를 변환 처리 과정을 해야 하며, IDictionary<string, IEnumerable<IDictionary<string, object>>> 을 가지고 변환할 수 있습니다.


또한 약간의 LINQ 를 이용하여 코드 간소화를 했습니다.

static object RowsToDictionary(this DataTable table)
{
   var columns = table.Columns.Cast<DataColumn>().ToArray();
   return table.Rows.Cast<DataRow>().Select(r => columns.ToDictionary(c => c.ColumnName, c => r[c]));
}

static Dictionary<string, object> ToDictionary(this DataTable table)
{
   return new Dictionary<string, object>
   {
       { table.TableName, table.RowsToDictionary() }
   };
}

static Dictionary<string, object> ToDictionary(this DataSet data)
{
   return data.Tables.Cast<DataTable>().ToDictionary(t => t.TableName, t => t.RowsToDictionary());
}

public static string GetJSONString(DataTable table)
{
   JavaScriptSerializer serializer = new JavaScriptSerializer();
   return serializer.Serialize(table.ToDictionary());
}

public static string GetJSONString(DataSet data)
{
   JavaScriptSerializer serializer = new JavaScriptSerializer();
   return serializer.Serialize(data.ToDictionary());
}  

 


위의 Json 값을 자바스크립트에서 가져와서 사용하고자 한다면 JSON 객체로 변환을 하기 위해 아래와 같이 작업을 해야 겠습니다.



var ShimObject = eval('(' + JSONString + ')');



이제 ShimObject 객체를 이용하여 for 문으로 JSON 값을 파싱하여 값을 가져오도록 하죠.


for(var i = 0; i < ShimObject .Employees.length; i++)

{

         var val1 = ShimObject .Employees[i].EmployeeID;
         var val3 = 
ShimObject .Employees[i].Title;
         var
 val4 = 
ShimObject .Employees[i].BirthDate;

}




참고사이트 : http://www.json.org/.



감사합니다. 


POSTED BY 심재운(shimpark@gmail.com)