从 ASP.Net Web 服务 json 输出中删除“d”对象
Posted
技术标签:
【中文标题】从 ASP.Net Web 服务 json 输出中删除“d”对象【英文标题】:Removing the "d" object from ASP.Net web service json output 【发布时间】:2011-02-18 04:26:25 【问题描述】:我有一些 javascript 代码可以处理使用框架 2.0 构建的 asp.net Web 服务的 json 输出。现在我需要支持从框架 3.5 Web 服务返回的数据。
我的 javascript 代码假定一个对象列表作为返回值,这在 2.0 中可以正常工作。但是在框架 3.5 中,列表被包装在一个“d”对象中。有什么办法可以删除“d”包装并返回列表?
我希望在服务器端解决这个问题
【问题讨论】:
旁注:d
包装器是一种安全措施。见encosia.com/2009/02/10/…
相关:***.com/questions/830112/what-does-d-in-json-mean
【参考方案1】:
您不能将 3.5+ 服务配置为不返回 .d
。它也在那里很好,因为它可以防止外部 JSON 实体是数组时存在的棘手的 JSON 劫持场景。
ASP.NET AJAX 的客户端代理会自动对您隐藏.d
。如果它妨碍您,我假设您正在使用 jQuery 之类的东西来调用服务?以You can normalize the .d
in jQuery by using its DataFilter callback 为例。
【讨论】:
谢谢。我使用mootools。会为 mootools 找到类似的东西或自己滚动【参考方案2】:这是一种解决方法
[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public void Status()
MyObject myObject = new MyObject(); // your object here
var json = Newtonsoft.Json.JsonConvert.SerializeObject(myObject);
HttpContext.Current.Response.Write(json);
【讨论】:
我看到你的答案后就很明显了。在我的 json 响应对象之后,我仍然得到 d json 对象,所以我添加了 ...Response.Flush() 和 ...Response.End() 以完全摆脱它。谢谢。【参考方案3】:如果您有在客户端进行更改的优势,那么最好的方法是使用 jquery,您会找到大量的解决方案。但是,如果您想在服务层上删除“d”,最好的方法是在 Web Api 中重写您的 Web 服务(您也可以使用 WCF)。 Web Api 不返回“d”作为响应。
【讨论】:
以上是关于从 ASP.Net Web 服务 json 输出中删除“d”对象的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET - 使用 jQuery 实现基于 JSON 的 Web 服务的正确方法是啥?
使用 c# --> asp.net web api 在 json 中获取分层输出
ASP.NET Web API JSON 输出中没有时间的日期
如何使用 json 从 sql server ASP.net 中检索数据