
DataContract方式做对象的XML序列化可能出现的BUG
发布日期:2022-03-30 20:19:27
浏览次数:40
分类:博客文章
本文共 775 字,大约阅读时间需要 2 分钟。
如果你在做DataContract序列化时,你是用FileMode.Open模式而不是用 FileMode.Truncate打开时,序列化从位置0开始写入数据,如果原来的文件大小比现在序列化写入的大,此时你的序列化会出问题.因为在当前写入最大位置之后位置的内容还被保留,而导致XML文件格式错误.解释起来可以这么说:如果原来文件长度是1024字节,你现在的序列化的结果只有512字节,那么在文件的后512字节将会保留原来的内容.
错误的方式:WebFolderEntity folder;
using (var ms = File.OpenWrite(Path.Combine(DataRootPath, "WebFolder.xml")))//这种方式可能出错 { ms.SetLength(1);//即使使用了SetLength(1)让流变成只有1个字节,一样可能出问题 DataContractSerializer ds = new DataContractSerializer(typeof(WebFolderEntity)); ds.WriteObject(ms, a); ms.Flush(); }正确的方式:
WebFolderEntity folder;
using (var ms = File.Open(Path.Combine(DataRootPath, "a.xml"), FileMode.Truncate, FileAccess.Write)) { ms.SetLength(1); DataContractSerializer ds = new DataContractSerializer(typeof(WebFolderEntity)); ds.WriteObject(ms, a); ms.Flush(); }转载地址:https://www.cnblogs.com/agebull/archive/2012/03/30/2424952.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2023年09月11日 16时42分22秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
图片添加水印、文件转图片、图片转文件、html2canvas截屏功能
2019-03-07
使用 node 和 socket 实现在线聊天室
2019-03-07
设置定时器和清除定时器的最佳方案
2019-03-07
Element-ui 对话框el-dialog点击关闭事件处理
2019-03-07
前端通过Vue自己实现输入框模糊筛选数据,并将筛选结果展示
2019-03-07
Vue实现移动端APP的方格布局横向滑动翻页带滚动条
2019-03-07
踩坑记录(四)本地连接服务器宝塔面板数据库连不上去
2019-03-07
踩坑记录(五) 时间戳出问题
2019-03-07
Docker简介与安装
2019-03-07
Linux如何关闭某个被占用的端口
2019-03-07
使用Nginx反向代理将自己的域名指向自己所发布的项目
2019-03-07
Redis入门教学
2019-03-07
个人的spring面试总结
2019-03-07
Spring MVC的跨域访问
2019-03-07
Spring MVC 拦截器
2019-03-07
RISC-V编译流程及汇编设计
2019-03-07
内联函数×cpu验证
2019-03-07
Java基础学习生疏知识点总结(4)——面向对象、单一职责原则、this关键字、构造方法
2019-03-07
JAVA数据结构学习(1)——链表
2019-03-07