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 ”是什么意思?对于我从网络方法发送的任何数据,它是否总是相同的?还是会根据我的数据类型/类类型而改变?

编辑

这是网络方法

[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 都是这种情况。即使您只返回一个标量返回值,例如字符串、int 或布尔值,结果也将始终包含在“d”中。

以及为什么:

{"d": 1 }

不是有效的 JavaScript 语句,如下所示:

[1]

是。

因此,“d”参数的包装阻止了将字符串作为脚本直接执行。无需担心 Object 或 Array 构造函数。

于 2012-04-21T23:44:29.400 回答