2015년 5월 19일 화요일

C# 웹서비스로 JSON 결과값 생성하기

.Net 에는 웹서비스라는 좋은 기능이 있지만, 웹서비스란게 나올 당시에는 Xml 이 대세였던지라, 기본적인 결과값은 Xml 로 나오고, 웹에서 찾을수 있는 대부분의 예제들도 거의 대부분 Xml 을 가지고 설명한다.

하지만, 요즘은 JSON 이 대세인지라... .Net 웹서비스도 JSON 결과값을 출력할 필요가 있다.

일단 간단하게 웹서비스를 하나 생성하고...



서비스 이름은 아무거나 주면 되지만, 나의 경운 testService 라고 주었다.


"다른 파일에 코드 입력" 이 체크되어 있어서 "testService.asmx" 에는 별 내용이 없다.


이대로 냅두면 되고...


"testService.cs" 를 아래와 같이 편집한다.


[Source]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

using System.Web.Script.Services;
using System.Web.Script.Serialization;  

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class testService : System.Web.Services.WebService 
{
    public testService () {
        //InitializeComponent(); 
    }

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string getMemberInfoJson()
    {
        Member[] info = new Member[] {  
            new Member()  
            {  
                Id  = "User01",  
                Name= "Guest"
            },  
            new Member()  
            {  
                Id  = "Son10001",  
                Name= "Son"
            }  
        };
        return new JavaScriptSerializer().Serialize(info);  
    }

    [WebMethod]
    public Member[] getMemberInfoXml()
    {
        Member[] info = new Member[] {  
            new Member()  
            {  
                Id  = "User01",  
                Name= "Guest"
            },  
            new Member()  
            {  
                Id  = "Son10001",  
                Name= "Son"
            }  
        };
        return info;
    }

    public class Member
    {
        public string Id { get; set; }
        public string Name { get; set; }
    }

}




다른건 별로 신경쓸것 없고, 아래에 표시한 상자의 내용만 주의 하면 된다.


이렇게 하고 웹에서 해당 웹서비스를 열어 보면...


이렇게 웹서비스가 2개 등록되어 있는게 보일것이다.
일단 JSON 이 목적이니 "getMemberInfoJson" 을 클릭해본다.


저기서 "호출" 이라는 버튼을 클릭해보면...


이렇게 JSON 형태로 결과값이 나온다.


마찬가지로 "getMemberInfoXml" 선택해 호출하면...

 이렇게 Xml 로 결과 값이 나온다.

이걸 웹에서 jQuery 로 호출해 보면...


<%@ Page Language="C#" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    <title></title>
    <script src="js/jquery-1.4.4.min.js"></script>
    <script src="js/jquery-ui-1.8.8.custom.min.js"></script>
    <script>
        function HelloQuery() {
            $.ajax({
                type:"POST",
                url: "http://localhost:915/_Test/testService.asmx/getMemberInfoJson",
                processData:false,
                contentType:"Application/json;charset=utf-8",
                dataType:"json",
                success:function (data) {
                    alert(data.d);
                }
            });
        }
    </script>
</head>

<body>
    <form id="form1" runat="server">
    <div>
        <a href="#" onclick="HelloQuery()">Test</a>
    </div>
    </form>
</body>
</html>


이렇게 웹페이지를 만들고...


클릭해 호출... 하면...


이렇게 JSON 으로 결과값을 받을 수 있다.