我从a WebMethod
中返回的每个对象都ScriptService
被包装到一个JSON对象中,并且数据位于一个名为的属性中d
.没关系.但我不希望将附加__type
属性提供给客户端,因为我使用jQuery进行手动处理.
可能吗?
好吧,你提问已经很久了.我发现如果我创建我的类的默认构造函数,我的webmethod返回除public之外的任何东西,它将不会序列化__type:ClassName部分.
您可能想要声明默认构造函数 __type:ClassName
John的解决方案对我不起作用,因为我返回的类型是单独的DLL.我完全控制该DLL,但如果构造函数是内部的,我无法构造我的返回类型.
我想知道返回类型是否是库中的公共类型甚至可能是原因 - 我一直在做很多Ajax,之前没有见过这个.
快速测试:
暂时将返回类型声明移动到App_Code中.仍然__type
序列化.
同上并根据JM应用受保护的内部构造函数.这很有效(所以他得到了投票).
奇怪的是我没有__type
使用泛型返回类型:
[WebMethod] public static WebMethodReturn> GetAccountCredits()
但是,我的解决方案是将我的返回类型保留在DLL中,但将WebMethod返回类型更改为object,即
[WebMethod] public static object ApplyCredits(int addonid, int[] vehicleIds)
代替
[WebMethod] public static WebMethodReturn ApplyCredits(int addonid, int[] vehicleIds)
我一直在使用.NET 4 WCF服务尝试其中一些建议,但它们似乎不起作用 - JSON响应仍然包含__type.
我发现删除类型提示的最简单方法是将端点行为从enableWebScript更改为webHttp.
如果您使用的是ASP.NET AJAX客户端,则需要默认的enableWebScript行为,但如果您使用JavaScript或jQuery操作JSON,则webHttp行为可能是更好的选择.
如果您正在使用ServiceStack.Text JSON Serializer,您只需:
JsConfig.ExcludeTypeInfo = true;
此功能在v2.28中自动添加回来,但上面的代码将其保留在序列化之外.您还可以通过以下方式更改此行为Type
:
JsConfig.ExcludeTypeInfo = true;