为什么Web服务将数据作为msg.d返回

Deb*_*Deb 6 asp.net jquery json web-services javascriptserializer

我发现我的webmethod正在返回数据

{ "d":
 [
   {"id":"1","itemtxt":"Masters"},
   {"id":"2","itemtxt":"Transactions"},
   {"id":"3","itemtxt":"Misch. Reports"}
 ]
}
Run Code Online (Sandbox Code Playgroud)

如果您注意到,该数组被命名为" 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; }
}
Run Code Online (Sandbox Code Playgroud)

这个" d "是什么意思?对于我从网络方法发送的任何数据,它总是相同吗?或者它会根据我的数据类型/类类型而改变?

编辑

这是web方法

[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);
}
Run Code Online (Sandbox Code Playgroud)

vcs*_*nes 5

作为ASP.NET的一部分,这是一个安全功能.只要您不更改序列化程序,它就会一直存在.大卫沃德的博客(现已解散)说它是什么:

通过ASP.NET 3.5中的ASP.NET AJAX Extensions序列化的所有ASMX服务JSON都是这种情况.即使您只返回标量返回值(如string,int或boolean),结果也始终包含在"d"中.

原因是:

{"d":1}

不是有效的JavaScript语句,其中:

[1]

是.

因此,"d"参数的包装可防止将字符串直接执行为脚本.没有对象或数组构造函数担心.