JSON 형태의 데이터를 C# 형태로의 변환
java script에서나 Netscape 진형에서 주로 사용되는 JSON 데이터 형태를 C# class로 변환 및 이를 이용한 AJAX 개발이 가능하다.
먼저, C# class의 선언
- public class Company
- {
- public string Name { get; set; }
- public string Location { get; set; }
- public string Subject { get; set; }
- }
여기서 간단히 3개의 Input box를 갖는 View Page의 생성
- <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="CompanyView.aspx.cs" Inherits="MvcJson.Views.Home.CompanyView" %>
- <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
- Company Name : <%=Html.TextBox("CompanyName") %> <br />
- Company Subject : <%=Html.TextBox("Subject") %> <br />
- Company Location : <%=Html.TextBox("Location") %> <br />
- <input type="button" id="sendCompanyData" value="Send Company Data" /><br />
- <div id="resultArea"></div>
- </asp:Content>
HttpContext를 이용해서 json data를 HTTP-POST로 전달하는 javascript
(jQuery 이용.)
- <script type="text/javascript" src="<%= Url.Content("~/Scripts/jquery-1.2.6.js") %>"></script>
- <script type="text/javascript" src="<%= Url.Content("~/Scripts/jquery.toJSON.js") %>"></script>
- <script type="text/javascript">
- $(function() {
- //sending json object to controller action:
- $("#sendCompanyData").click(function() {
- var company = {
- "Name": $("#CompanyName").val(),
- "Subject": $("#Subject").val(),
- "Location": $("#Location").val()
- };
- var encoded = $.toJSON(company);
- $.ajax({
- url: "/Home/ShowCompany",
- type: "POST",
- dataType: 'json',
- data: encoded,
- contentType: "application/json; charset=utf-8",
- beforeSend: function() { $("#saveStatus").html("Saving").show(); },
- success: function(result) {
- alert(result.Result);
- $("#saveStatus").html(result.Result).show();
- }
- });
- });
- });
- </script>
데이터를 받을 Controller 작성
- public ActionResult ShowCompany()
- {
- if(HttpContext.Request.ContentType.Contains("application/json"))
- {
- string inputContent;
- int dataLength = (int) HttpContext.Request.InputStream.Length;
- byte[] btDatas = new byte[dataLength];
- HttpContext.Request.InputStream.Read(btDatas, 0, dataLength);
- inputContent = System.Text.Encoding.UTF8.GetString(btDatas);
- var result = (Company) JavaScriptConvert.DeserializeObject(inputContent, typeof(Company));
- return Json(new { Result = string.Format("{0} : {1} : {2}", result.Name, result.Subject, result.Location) });
- }
- else
- {
- return Json(new { Result = "This data is not json" });
- }
- }
결론 : JSON -> C# class 변환은 매우 자유로운 편이다. 예시의 JSON이 있다면 C# class를 자동으로 작성해주는 간단한 script만 있으면 둘이 같이 사용하기가 매우 편할것 같다.