您的位置:首页 > 其它

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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐