0

我正在使用 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 文件中,我在浏览器中调用它

4

2 回答 2

3

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

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

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

    }

目前,此方法返回 a string,它可以是JSON结构化字符串。但是,您最好返回一个对象,该对象可以解析为JSON. List<string>以及具有标准数据类型的类(如integers等)strings对此非常有用。然后,您可以只返回该对象。负责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<string>将成为一个数组

使用 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];
            }
        });
});
于 2012-11-20T14:16:29.043 回答
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 被声明为公共实例方法,而不是public static.aspx文件中。

于 2013-08-01T02:51:52.327 回答