当前位置:  开发笔记 > 编程语言 > 正文

如何在JSON对象上序列化__type属性

如何解决《如何在JSON对象上序列化__type属性》经验,为你挑选了4个好方法。

我从a WebMethod中返回的每个对象都ScriptService被包装到一个JSON对象中,并且数据位于一个名为的属性中d.没关系.但我不希望将附加__type属性提供给客户端,因为我使用jQuery进行手动处理.

可能吗?



1> 小智..:

好吧,你提问已经很久了.我发现如果我创建我的类的默认构造函数,我的webmethod返回除public之外的任何东西,它将不会序列化__type:ClassName部分.

您可能想要声明默认构造函数 __type:ClassName


@Naor:我的JS对象包含一个包含大约1000个具有两个属性(ID,Name)的简单对象的数组.然后添加if _type = namespace.name(1000次),这大约是传输的数据量的两倍.

2> Stephen Kenn..:

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)



3> Jonathan Say..:

我一直在使用.NET 4 WCF服务尝试其中一些建议,但它们似乎不起作用 - JSON响应仍然包含__type.

我发现删除类型提示的最简单方法是将端点行为从enableWebScript更改为webHttp.

    
      
    

如果您使用的是ASP.NET AJAX客户端,则需要默认的enableWebScript行为,但如果您使用JavaScript或jQuery操作JSON,则webHttp行为可能是更好的选择.


这是唯一适用于.Net 4 Web服务的东西.非常有用,谢谢.

4> Brett Veenst..:

如果您正在使用ServiceStack.Text JSON Serializer,您只需:

JsConfig.ExcludeTypeInfo = true;

此功能在v2.28中自动添加回来,但上面的代码将其保留在序列化之外.您还可以通过以下方式更改此行为Type:

JsConfig.ExcludeTypeInfo = true;

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有