我发现我的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);
}
答案 0 :(得分:5)
这是ASP.NET的一部分安全功能。只要您不更改序列化程序,它就会一直存在。大卫沃德的博客(现已解散)说它是什么:
通过ASP.NET 3.5中的ASP.NET AJAX Extensions序列化的所有ASMX服务JSON就是这种情况。即使您只返回标量返回值(如string,int或boolean),结果也始终包含在“d”中。
原因是:
{“d”:1}
不是有效的JavaScript语句,其中包含:
[1]
时。
因此,“d”参数的包装可防止将字符串直接执行为脚本。没有对象或数组构造函数担心。