DataContract方式做对象的XML序列化可能出现的BUG
发布日期:2022-03-30 20:19:27 浏览次数:13 分类:博客文章

本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Azure中使用Ubuntu创建Apache服务器
下一篇:WPF/Silverlight 终极加速方案(无反射绑定)

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2023年03月05日 03时15分50秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

仓鼠找sugar(倍增LCA) 2019-05-11 01:03:48
Balanced Lineup——RMQ 2019-05-11 01:03:47
系统重装后快速恢复hexo 2019-05-11 01:03:47
How far away(倍增LCA) 2019-05-11 01:03:47
Minimum Inversion Number(逆序数) 2019-05-11 01:03:46
不要62 2019-05-11 01:03:46
乘法逆元的具体求法 2019-05-11 01:03:46
Intervals 2019-05-11 01:03:46
高斯消元模板 2019-05-11 01:03:45
P3379 【模板】最近公共祖先(LCA) 2019-05-11 01:03:45
没有上司的舞会 2019-05-11 01:03:45
I hate it (最值单点修改区间查询) 2019-05-11 01:03:44
石子合并 2019-05-11 01:03:44
Machine Schedule 2019-05-11 01:03:44
Interviewe ——RMQ 2019-05-11 01:03:44
VS2017OpenGL的配置 2019-05-11 01:03:43
Buy Tickets (插队问题) 2019-05-11 01:03:43
无题II(二分+匈牙利) 2019-05-11 01:03:43
Who Gets the Most Candies?(约瑟夫环+反素数+插队) 2019-05-11 01:03:42
Going Home (最小权值完备匹配) 2019-05-11 01:03:42