【问题标题】:get JSON from ASP.NET web service ASMX file从 ASP.NET Web 服务 ASMX 文件中获取 JSON
【发布时间】:2012-11-20 14:03:21
【问题描述】:

我正在使用 ASP.NET、C# 创建 Web 服务,目前它提供 XML,但我将获取 JSON,这就是我创建 webmtheod 的方式:

[Webservice(Namespace="http://myurl)]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfiles_1)]
[System.ComponentModel.ToolboxItem(false)]

[WebMehod]
public string myfunction()
{

string r = "......";


return r;
}

这些在一个 ASMX 文件中,我在浏览器中调用它

【问题讨论】:

  • 此函数返回 XML 输出,但我要获取 JSON,如何获取 JSON?我想我应该使用 .NET 序列化函数,但是如何?

标签: asp.net xml json web-services


【解决方案1】:

如果你想从你的方法中返回 JSON,你需要使用 ScriptMethod 属性。

像这样构造你的方法,注意[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 属性。

    [WebMethod()]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string MyMethod()
    {

    }

目前,此方法返回一个string,它可以是一个JSON 结构化字符串。但是,您可能最好返回一个对象,该对象可以解析为JSONList<string> 以及具有标准数据类型的类,如 integersstrings 等非常适合此。然后,您可以只返回该对象。 ScriptMethod 负责将其转换为 JSON

例如:

你要返回的类:

      public class MyJson
      {
         public int ID;
         public List<string> SomeList;
         public string SomeText;
     }

以及您返回填充MyJson的方法

        [WebMethod()]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public MyJson MyMethod()
        { 
          MyJson m = new MyJson();
          m.ID = 1;
          m.SomeText = "Hello World!";
          m.SomeList = new List<string>();
          m.SomeList.Add("Foo");
          m.SomeList.Add("Bar");

          return m;
        }

返回JSON 的结构与类一样。属性名称也将被使用,您的List&lt;string&gt; 将成为一个数组

使用 AJAX 调用它。本例中的 JQuery:

$(document).ready(function(){

      $.ajax({
            type: "POST",
            url: "/YourPage.aspx/MyMethod",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {

             // content will be in here... I.E
             var id = msg.d.ID;
             var st = msg.d.SomeText;
             var sl = msg.d.SomeList;
             var i = sl.length;
            var firstSlItem = sl[0];
            }
        });
});

【讨论】:

  • 谢谢,但似乎我仍然得到一个 XML(它现在的结构类似于我的类),我应该如何在浏览器中调用我的 web 服务以获取 json 输出?
  • 使用 AJAX 调用它,确保将数据类型指定为 JSON。我将添加一些示例代码。
  • 如果它仍然返回 AJAX,请查看此页面 stackoverflow.com/questions/2749954/… - 如果它们有帮助,请不要忘记将所有答案标记为已回答,如果它们也对您有帮助,请点赞其他答案。
【解决方案2】:


另一种方法是使用 JavaScriptSerializer 将 JSON 作为字符串返回:

[System.Web.Services.WebMethod()]
public string GetItems() {
    List<string> listOfItems = new List<string> {"asdf", "qwerty", "abc", "123"};

    JavaScriptSerializer js = new JavaScriptSerializer();
    string json = js.Serialize(listOfItems);

    return json;
}


...请务必使用此导入:

using System.Web.Script.Serialization;


...然后您必须像这样在 javascript / jQuery 中解析结果:

var result = "";

$.ajax({

      // ...other properties defined here...

      success: function (response) {
            result = JSON.parse(response.d);
      }
});

// the List<string> has been parsed into an array:
for (var i = 0, len = result.length; i < len; i++) {
      alert(result[i]);
}


如果您以同样的方式转换一个类的实例,例如这里的@Darren 示例,那么它将被解析为 javascript object-literal。

另请注意,在 .asmx 文件中,webmethods 被声明为公共实例方法,而不是在 .aspx 文件中的 public static

【讨论】:

    猜你喜欢
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 2012-06-20
    相关资源
    最近更新 更多