DataContract方式做对象的XML序列化可能出现的BUG
2012-03-30 11:50
417 查看
如果你在做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();
}
错误的方式:
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();
}
相关文章推荐
- InnerException 消息是“反序列化对象 属于类型 *** 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。(注意细节)
- XML序列化对象时出现中文乱码
- 对象的序列化与反序列化,以xml,二进制流的方式,soap方式序列化对象
- InnerException 消息是“反序列化对象 属于类型 *** 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。(注意细节)
- 【C#】解决进行反序列化时出错:。InnerException 消息是“反序列化对象 属于类型 System.String 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。
- 序列化对象,使用的三种方式:Xml,Binary,Soap
- 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: GetLzdtArticleResult。InnerException 消息是“反序列化对象 属于类型 lzdt.DTO.Dtolzdt[] 时出现错误。读取 XML 数据时,超出最大
- 【慕课笔记】3-4 应用SAX方式解析XML—使用SAX解析将XML的内容和结构存入JAVA对象
- xml序列化方式
- 以读取博客园随笔备份为例 将xml 序列化成json,再序列化成对象
- Intent传递对象(两种序列化方式Serializable/Parcelable)
- 对象与XML,序列化与反序列化
- AJAX-----05XMLHttpRequest对象的用post方式进行ajax请求
- DELPHI XE2 采用 JSON 的方式来序列化对象
- XmlSerializer 对象的Xml序列化和反序列化
- 序列化反序列化对象XML文件写入Sample[简单但是有代表性]
- java序列化与反序列化(5)------反序列化时对象的创建方式
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(10):服务器端和客户端数据类型的自动转换:以XML方式序列化数据、小结
- xmldocument对象用save方法时出现"代理项对无效"错误
- xml和模型对象之间的序列化和反序列化