Serializable引起System.StackOverFlowException

admin7年前 (2016-12-23)网站设计933

场景:web client + webapi,涉及到对象序列化

传输的对象使用Serializable属性时的调试效果,出现堆栈溢出,iisexpress也挂掉了。

出现这个问题,一般也难找出问题所在,但是看response的json字符串有很多k_backingField的属性,这种属性的生成应该是序列化时自动生成的,应该是自动属性的原因,有时间有同学可以验证下,也可以使用Reflector反汇编看看自动属性生成的字段前缀,或者用ILSpy,用ILSpy看了下并没有生成字段前缀,不知道Reflector是什么效果。

将Serializable属性变成DataContract后,程序不再中断,输出正常,只是没有带出字段,因为没有标明DataMember


加了DataMember后response正常了。

最终的代码如图,重点地方已用红框标出。

因此,这里要搞清楚Serializable和DataContract的用法。

[Serializable] 序列化是指将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本 说的简单点就是  对象是暂时保存在内存中的,不能用U盘考走了,有时为了使用介质转移对象,并且把对象的状态保持下来,就需要把对象保存下来,这个过程就叫做序列化

数据契约[DataContract] 服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型。一旦声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送


相关文章

代码实现百度的自动Ping服务

代码实现百度的自动Ping服务

为了加快网站页面收录,seo人员可通过网站外链建设来实现,seo外链专员就是做这个工作的。还有一种方式是向搜索引擎提交网站的URL,这就是百度的Ping服务。ping是基于XML_RPC标准协议的更新...

从seo的角度看网站建设

从seo的角度看网站建设

说起网站建设,大家都感觉很容易,特别是现在cms系统的出现,将网站建设的门槛降低了很多,而且我们还时常在一些社交群里看到几百块网站建设的。网站建设似乎不再是技术活,而变成只要是懂一点网络操作的人都能做...

网站安全之防止重放攻击

网站安全之防止重放攻击

网站设计中有一项——网站安全是需要开发人员去考虑的,今天要讲的是网站安全中的重放攻击。什么是重放攻击?如何防止重放攻击?重放攻击(Replay Attacks)又称重播攻击、回放攻击或新鲜性攻击(Fr...

discuzX单页制作

一般单页效果设计ycy.php 放在dz的根目录<?php            ...

sql server如何从存储过程中查找指定的内容

sql server如何从存储过程中查找指定的内容

今天公司系统异常的慢,通过数据库监测发现是由于一段查询所引起。不过由于系统庞大,很难去定位这段sql查询是系统里那里的执行代码。那么如何去从这拥有400多张表,100多个存储过程的数据库中找到是哪个存...

zblog分类页高级伪静态

上一篇给zblog分类页的标题加上了页码,以利于网站SEO,这次要解决的是zblog分类页伪静态时一个缺点——URL分类目录不统一,对搜索引擎也是不友好的。作为网站建设者,一个对代码敏感的程序开发人员...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。