小弟的这段代码 是仿照书本案例写的。
但是我在调试时,发现:当运行到:返序列化时。每次运行都执行:try -> catch(SerializationException)
{
stream1.Position = 0;
return null;
}
而书本的光碟案例的却执行:try
{
userInformation = (UserInformation)formatter.Deserialize(stream1);
}
return userInformation;
}
这是什么原因呢?捕获异常时提示:”二进制流“0”不包含有效的 BinaryHeader。这可能是由于无效流,或由于在序列化和反序列化之间 的对象版本更改“ 小弟恳求高手们。帮帮小弟,无尽感激。 //返序列化
public UserInformation Readrecord()
{
UserInformation userInformation = null;
try
{
userInformation = (UserInformation)formatter.Deserialize(stream1);
}
catch(SerializationException)
{
stream1.Position = 0;
return null;
}
return userInformation;
}
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization;//用于用户信息的,写入、与读取文件数据
namespace SQL_courser
{
public class FileManage
{
//字节序列 用于用户信息的序列化
public Stream stream1;
//以二进制将对象序列化
BinaryFormatter formatter = new BinaryFormatter();
BinaryFormatter formatter1 = new BinaryFormatter(); //以在文件性追加数据的形式打开文件
public void Appendfile()
{
//控制文件。以只写的形式
stream1 = new FileStream(@"E:\c#126下载\my work\窗体设计\SQL courser\SQL courser\UserInfromation\UserInformationFile.bin", FileMode.Append, FileAccess.Write);
}
//向用户信息文件追加新用户(即序列化)
public void Addrecord(UserInformation userInformation)
{
//将对象转化为流 formatter1.Serialize(stream1, userInformation);
} //以只读的形式打开文件
public void openfile()
{
stream1 = new FileStream(@"E:\c#126下载\my work\窗体设计\SQL courser\SQL courser\UserInfromation\UserInformationFile.bin", FileMode.Open, FileAccess.Read);
} //返序列化
public UserInformation Readrecord()
{
UserInformation userInformation = null;
try
{
userInformation = (UserInformation)formatter.Deserialize(stream1);
}
catch(SerializationException)
{
stream1.Position = 0;
return null;
}
return userInformation;
} //关闭文件
public void Closefile()
{
stream1.Close();
}
}
}
但是我在调试时,发现:当运行到:返序列化时。每次运行都执行:try -> catch(SerializationException)
{
stream1.Position = 0;
return null;
}
而书本的光碟案例的却执行:try
{
userInformation = (UserInformation)formatter.Deserialize(stream1);
}
return userInformation;
}
这是什么原因呢?捕获异常时提示:”二进制流“0”不包含有效的 BinaryHeader。这可能是由于无效流,或由于在序列化和反序列化之间 的对象版本更改“ 小弟恳求高手们。帮帮小弟,无尽感激。 //返序列化
public UserInformation Readrecord()
{
UserInformation userInformation = null;
try
{
userInformation = (UserInformation)formatter.Deserialize(stream1);
}
catch(SerializationException)
{
stream1.Position = 0;
return null;
}
return userInformation;
}
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization;//用于用户信息的,写入、与读取文件数据
namespace SQL_courser
{
public class FileManage
{
//字节序列 用于用户信息的序列化
public Stream stream1;
//以二进制将对象序列化
BinaryFormatter formatter = new BinaryFormatter();
BinaryFormatter formatter1 = new BinaryFormatter(); //以在文件性追加数据的形式打开文件
public void Appendfile()
{
//控制文件。以只写的形式
stream1 = new FileStream(@"E:\c#126下载\my work\窗体设计\SQL courser\SQL courser\UserInfromation\UserInformationFile.bin", FileMode.Append, FileAccess.Write);
}
//向用户信息文件追加新用户(即序列化)
public void Addrecord(UserInformation userInformation)
{
//将对象转化为流 formatter1.Serialize(stream1, userInformation);
} //以只读的形式打开文件
public void openfile()
{
stream1 = new FileStream(@"E:\c#126下载\my work\窗体设计\SQL courser\SQL courser\UserInfromation\UserInformationFile.bin", FileMode.Open, FileAccess.Read);
} //返序列化
public UserInformation Readrecord()
{
UserInformation userInformation = null;
try
{
userInformation = (UserInformation)formatter.Deserialize(stream1);
}
catch(SerializationException)
{
stream1.Position = 0;
return null;
}
return userInformation;
} //关闭文件
public void Closefile()
{
stream1.Close();
}
}
}
第一是你的xml文件根本不是序列化出去之后,再反序列化回来的。
就是说你的xml文件和你的对象属性对不上,就序列化失败。又或者你的对象里面有font,或者color这种不能直接序列化的属性。