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()
    {

    }

現時点では、このメソッドは を返して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<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オブジェクトリテラルとして解析されます。

また、ファイル内で.asmxは webmethods がパブリック インスタンス メソッドとして宣言されていることにも注意してください。public static.aspx

于 2013-08-01T02:51:52.327 に答える