code

2.0 asmx 웹 서비스에서 JSON을 반환하는 방법

starcafe 2023. 8. 1. 20:40
반응형

2.0 asmx 웹 서비스에서 JSON을 반환하는 방법

사용하고 있습니다.Netframework 2.0 / jQuery: 2.0 웹 서비스에 Ajax를 호출합니다.내가 어떤 내용을 설정하든Ajax 호출에 to를 입력하면 서비스는 항상 XML을 반환합니다. Json을 반환합니다!

상담 내용은 다음과 같습니다.

      $(document).ready(function() {
         $.ajax({
            type: "POST",
            url: "DonationsService.asmx/GetDate",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {
              // Hide the fake progress indicator graphic.
              $('#RSSContent').removeClass('loading');

              // Insert the returned HTML into the <div>.
              $('#RSSContent').html(msg.d);
            }
          });
        });    

Fiddler에서 요청 헤더는 다음과 같습니다.

POST /DonationsService.asmx/GetDate HTTP/1.1
x-requested-with: XMLHttpRequest
Accept-Language: en-us
Referer: http://localhost:1238/text.htm
Accept: application/json, text/javascript, */*
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; eMusic DLM/4; .NET CLR 2.0.50727)
Host: localhost:1238
Content-Length: 2
Connection: Keep-Alive
Pragma: no-cache

내용을 설정해 보았습니다.text/json'을 입력하고 동일한 결과를 가져옵니다.

웹 서비스 방법은 다음과 같습니다.

<WebMethod()> _
Public Function GetDate() As String

    'just playing around with Newtonsoft.Json
    Dim sb As New StringBuilder
    Dim sw As New IO.StringWriter(sb)
    Dim strOut As String = String.Empty

    Using jw As New JsonTextWriter(sw)
        With jw
            .WriteStartObject()
            .WritePropertyName("DateTime")
            .WriteValue(DateTime.Now.ToString)
            .WriteEndObject()
        End With
        strOut = sw.ToString
    End Using

    Return strOut

End Function

그리고 다음과 같이 반환됩니다.

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://DMS.Webservices.org/">{"DateTime":"11/13/2008 6:04:22 PM"}</string>

제가 Json을 요청할 때 웹 서비스에서 Json을 강제로 반환하는 방법을 아는 사람이 있습니까?

로 업그레이드하라는 말은 하지 말아주세요.Net Framework 3.5 또는 그와 비슷한 것(나는 그렇게 멍청하지 않습니다).2.0 솔루션이 필요합니다.

ASP의 ASMX 서비스에서 JSON을 반환하는 것은 문제가 없습니다.NET 2.0.ASP만 있으면 됩니다.NET AJAX 확장이 설치되었습니다.

[ScriptService] 장식을 웹 서비스에 추가해야 합니다.이것이 ASP의 서버 측 부분을 지시하는 것입니다.올바른 형식의 요청에 대해 JSON을 반환하는 NET AJAX 프레임워크입니다.

또한 2.0과 함께 사용하는 경우에는 "msg.d"에서 ".d"를 삭제해야 합니다.".d"는 3.5와 함께 제공되는 보안 기능입니다.

사용자 메서드가 문자열을 반환한다고 하므로 응답이 요소로 감겨 있습니다.이를 사용하여 일반 json을 보낼 수 있지만 wsdl은 속게 됩니다(함수는 무효이지만 데이터에 응답합니다).

[WebMethod(Description="return pure JSON")]
public void retrieveByIdToPureJSON( int id )
{
  Context.Response.Write( JsonConvert.SerializeObject( mydbtable.getById(id) );
}

행운을 빌어요, 톰

참고: 뉴턴소프트를 참조하십시오.Json 변환을 위한 Json

다음과 같은 방법으로 웹 메소드를 장식해야 합니다.

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]

나머지는 당신이 옳아요 :)

Encosia Andrew Roland의 블로그에서 더 많은 정보 제공

편집: 아래에 명시된 대로 입니다.NET 3.5만 (나는 이것을 몰랐다, 내 잘못.

에서 XML 또는 이진 직렬화 이외의 작업은 수행할 수 없습니다.NET 2.0.자동 생성된 웹 참조를 사용하지 않는 경우 ASMX를 사용할 필요가 없습니다. 대신 ASPX 또는 ASHX를 사용하십시오.

asp.net 의 Jayrock 라이브러리 Quickstart를 사용할 수 있습니다.

이렇게 하면 http 핸들러를 작성하여 json을 반환할 수 있습니다.

<%@ WebHandler Class="JayrockWeb.HelloWorld" %>

namespace JayrockWeb
{
    using System;
    using System.Web;
    using Jayrock.Json;
    using Jayrock.JsonRpc;
    using Jayrock.JsonRpc.Web;

    public class HelloWorld : JsonRpcHandler
    {
        [ JsonRpcMethod("greetings") ]
        public string Greetings()
        {
            return "Welcome to Jayrock!";
        }
    }
}

Reflection을 사용하여 자신만의 빠른 JSON 컨버터를 작성하는 것도 가능합니다.

Dim sb As New StringBuilder("{")
For Each p As PropertyInfo In myObject.GetType().GetProperties()
    sb.Append(String.Format("""{0}"":""{1}"",", p.Name, p.GetValue(myObject,  
              Nothing).ToString()))
Next p

//remove the last "," because it's uneeded.
sb.Remove(sb.Length - 1, 1)

sb.Append("}")    

100% 정확하지는 않지만 .net 웹 서비스가 XML/SOAP 기반이라고 확신합니다.

웹 서비스의 기본 동작을 재정의해야 합니다.저는 이것이 가능할지조차 완전히 확신할 수 없습니다.

이것이 가장 유용한 답이 아닐 것이라는 것을 알지만, 당신이 올바른 방향으로 나아갈 수 있도록 도와줄 수도 있습니다.

언급URL : https://stackoverflow.com/questions/288850/how-to-return-json-from-a-2-0-asmx-web-service

반응형