从ASP.NET web服务ASMX文件获取JSON

从ASP.NET web服务ASMX文件获取JSON,asp.net,xml,json,web-services,Asp.net,Xml,Json,Web Services,我正在使用ASP.NET,C#创建一个web服务,目前它提供XML,但我将获得JSON,这是我创建webmtheod的方式: [Webservice(Namespace="http://myurl)] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfiles_1)] [System.ComponentModel.ToolboxItem(false)] [WebMehod] public string myfunction() { st

我正在使用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文件中,我在浏览器中将其称为

如果您希望从方法返回JSON,则需要使用ScriptMethod属性

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

    }
请注意
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
属性

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

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

例如:

要返回的类:

      public class MyJson
      {
         public int ID;
         public List<string> SomeList;
         public string SomeText;
     }
return
JSON
的结构与类类似。属性名称也将被使用,并且您的
列表
将成为一个数组

使用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];
            }
        });
});

如果希望从方法返回JSON,则需要使用ScriptMethod属性

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

    }
请注意
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
属性

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

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

例如:

要返回的类:

      public class MyJson
      {
         public int ID;
         public List<string> SomeList;
         public string SomeText;
     }
return
JSON
的结构与类类似。属性名称也将被使用,并且您的
列表
将成为一个数组

使用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];
            }
        });
});

另一种方法是使用
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;
}

…然后您必须在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]);
}
var结果=”;
$.ajax({
//…此处定义的其他属性。。。
成功:功能(响应){
result=JSON.parse(response.d);
}
});
//列表已解析为数组:
for(变量i=0,len=result.length;i

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

还要注意,在
.asmx
文件中,webmethods被声明为公共实例方法,而不是
.aspx
文件中的
公共静态方法。


另一种方法是使用
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;
}

…然后您必须在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]);
}
var结果=”;
$.ajax({
//…此处定义的其他属性。。。
成功:功能(响应){
result=JSON.parse(response.d);
}
});
//列表已解析为数组:
for(变量i=0,len=result.length;i

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

还要注意,在
.asmx
文件中,webmethods被声明为公共实例方法,而不是
.aspx
文件中的
公共静态方法。


此函数返回XML输出,但我要获取JSON,如何获取JSON?我想我应该使用.NET序列化函数,但是如何使用呢?这个函数返回我的XML输出,但是我要得到JSON,我如何才能得到JSON?我想我应该使用.NET序列化函数,但是如何使用呢?谢谢,但我似乎仍然在使用XML(它现在的结构与我的类类似),我应该如何在浏览器中调用我的Web服务以获得json输出?使用AJAX调用它,确保将数据类型指定为json。我将添加一些示例代码。如果它仍然返回AJAX,那么请查看此页面-如果他们有帮助,请不要忘记将所有答案标记为已回答,如果其他答案也有帮助,请向上投票。谢谢,但似乎我仍然得到一个XML(它现在的结构与我的类类似),我应该如何在浏览器中调用我的Web服务以获得json输出?使用AJAX调用它,确保将数据类型指定为JSON。我将添加一些示例代码。如果它仍然返回AJAX,请查看此页面-不要忘记,如果它们有帮助,请将所有答案标记为已回答,如果其他答案也有帮助,请向上投票。