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

时间:2012-04-21 23:20:58

标签: jquery asp.net json web-services javascriptserializer

我发现我的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

[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);
}

1 个答案:

答案 0 :(得分:5)

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

  

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

原因是:

  

{“d”:1}

     

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

     

[1]

     

时。

     

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