Serializable引起System.StackOverFlowException

admin5年前 (2016-12-23)网站设计801

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

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

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

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


加了DataMember后response正常了。

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

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

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

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


相关文章

asp版zblog文章分类页设计处理

asp版zblog文章分类页设计处理

zblog是一款非常优秀的cms程序,由RainbowSoft Studio团队开发,因其小巧强大而广泛用于博客程序的使用,目前有asp和php两个版本。这里以asp版本的zblog程序为例,讲解zb...

discuzX单页制作

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

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

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

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

从seo的角度看网站建设

从seo的角度看网站建设

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

网站安全之防止重放攻击

网站安全之防止重放攻击

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

discuz论坛全站关键标签伪静态问题

当我们采用discuz论坛程序建设的网站伪静态后,在论坛版块里面点击帖子转到帖子内容页是伪静态的地址。但是当我们点击论坛首页上面出现的“最后发表”“最新发表”等帖子标题时转到的具体的帖子内容页后发现帖...

发表评论

访客

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