6

私のwebmethodは次のようにデータを返していることがわかりました

{ "d":
 [
   {"id":"1","itemtxt":"Masters"},
   {"id":"2","itemtxt":"Transactions"},
   {"id":"3","itemtxt":"Misch. Reports"}
 ]
}

お気づきの方もいらっしゃると思いますが、配列の名前は「d」です。何故ですか ?何かルールはありますか?

参考までに、オブジェクトのリストを返します(List<webitem>

public class webitem
{
    public webitem(string kid, string kval)
    {
        this.id = kid;
        this.itemtxt = kval;
    }

    public string id { get; set;  }
    public string itemtxt { get; set; }
}

この「d」はどういう意味ですか?Webメソッドから送信するデータはすべて同じですか?または、データ型/クラスタイプに応じて変更されますか?

編集

これがwebmethodです

[WebMethod]
public  List<webitem> GetSubModules(string key)
{
    string s = " order by smid";
    if (key != null)
        s = " where moduleid=" + key + s;
    return Utility.GetDDLVal("Select smid id,smname itemtxt from m_submodules "+s, null, null);
}
4

1 に答える 1

5

これは、ASP.NET の一部としてのセキュリティ機能です。シリアライザーを変更しない限り、常に存在します。David Ward のブログ (現在は廃止されています) は、それが何であるかを述べています:

これは、ASP.NET 3.5 の ASP.NET AJAX 拡張によってシリアル化されたすべての ASMX サービスの JSON に当てはまります。string、int、boolean などのスカラーの戻り値のみを返す場合でも、結果は常に「d」で囲まれます。

そしてその理由:

{"d": 1 }

次のように、有効な JavaScript ステートメントではありません。

[1]

は。

したがって、「d」パラメーターをラップすると、文字列をスクリプトとして直接実行できなくなります。Object または Array コンストラクターの心配はありません。

于 2012-04-21T23:44:29.400 に答える