我有两个类users和member,member是users的子类,我现在对users类进行序列化后存入数据库,但是我进行反序列化的时候抛出的错误是member是null[Serializable]
public class Users
{
public string about;
public Member member = new Member();
}
[Serializable]
public class Member
{
public string name;
public string style;
}private static void RunAll()//这是把序列化的结果存进数据库
{
string str = "hfsjdhfkdsfkdhfsdhfsfsdfsdfsdfsdfsdfdsfdsfdsfdfjsjfsjlajflajsijfaladskfj";
string name = "艰苦的就";
string style = "11111111111111122222222222222222进风口大接访大开放"; Users users = new Users();
users.about = str;
users.member.name = name;
users.member.style = style; BinaryFormatter f = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
f.Serialize(stream, users);
byte[] writeIn = new byte[stream.Length];
stream.Read(writeIn, 0, (int)stream.Length); string strConn = ConfigurationSettings.AppSettings["ConnectionString"].ToString();
SqlCommand sqlCommand = new SqlCommand("testser", new SqlConnection(strConn));
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.Add(new SqlParameter("@about", SqlDbType.Image)); sqlCommand.Parameters["@about"].Value = writeIn;
sqlCommand.Connection.Open();
sqlCommand.ExecuteNonQuery();
sqlCommand.Connection.Close();
sqlCommand.Connection.Dispose();
Console.WriteLine("end");
}private static void Run()//这是反序列化的结果
{
string strConn = ConfigurationSettings.AppSettings["ConnectionString"].ToString();
SqlCommand sqlCommand = new SqlCommand(string.Format("select top 1 about from fushengtest"), new SqlConnection(strConn));
sqlCommand.Connection.Open(); byte[] tmp = (byte[])sqlCommand.ExecuteScalar(); sqlCommand.Connection.Close();
sqlCommand.Connection.Dispose();
Console.WriteLine(".....................");
BinaryFormatter f = new BinaryFormatter();
MemoryStream desStream = new MemoryStream();
desStream.Write(tmp,0,tmp.Length);
desStream.Position = 0;
Users s1 = (Users)f.Deserialize(desStream);
desStream.Close(); Console.WriteLine(s1.about);
Console.WriteLine(s1.member.name);
Console.WriteLine(s1.member.style);
Console.WriteLine("end");
}
请高手指教指教
public class Users
{
public string about;
public Member member = new Member();
}
[Serializable]
public class Member
{
public string name;
public string style;
}private static void RunAll()//这是把序列化的结果存进数据库
{
string str = "hfsjdhfkdsfkdhfsdhfsfsdfsdfsdfsdfsdfdsfdsfdsfdfjsjfsjlajflajsijfaladskfj";
string name = "艰苦的就";
string style = "11111111111111122222222222222222进风口大接访大开放"; Users users = new Users();
users.about = str;
users.member.name = name;
users.member.style = style; BinaryFormatter f = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
f.Serialize(stream, users);
byte[] writeIn = new byte[stream.Length];
stream.Read(writeIn, 0, (int)stream.Length); string strConn = ConfigurationSettings.AppSettings["ConnectionString"].ToString();
SqlCommand sqlCommand = new SqlCommand("testser", new SqlConnection(strConn));
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.Add(new SqlParameter("@about", SqlDbType.Image)); sqlCommand.Parameters["@about"].Value = writeIn;
sqlCommand.Connection.Open();
sqlCommand.ExecuteNonQuery();
sqlCommand.Connection.Close();
sqlCommand.Connection.Dispose();
Console.WriteLine("end");
}private static void Run()//这是反序列化的结果
{
string strConn = ConfigurationSettings.AppSettings["ConnectionString"].ToString();
SqlCommand sqlCommand = new SqlCommand(string.Format("select top 1 about from fushengtest"), new SqlConnection(strConn));
sqlCommand.Connection.Open(); byte[] tmp = (byte[])sqlCommand.ExecuteScalar(); sqlCommand.Connection.Close();
sqlCommand.Connection.Dispose();
Console.WriteLine(".....................");
BinaryFormatter f = new BinaryFormatter();
MemoryStream desStream = new MemoryStream();
desStream.Write(tmp,0,tmp.Length);
desStream.Position = 0;
Users s1 = (Users)f.Deserialize(desStream);
desStream.Close(); Console.WriteLine(s1.about);
Console.WriteLine(s1.member.name);
Console.WriteLine(s1.member.style);
Console.WriteLine("end");
}
请高手指教指教
解决方案 »
- 【求助】寻求一个slqlite相关的C#案例
- 如何提取字符串中的相关字符
- VS05 c# 基于桌面关于子窗体的弹出
- 关于检测客户端在线
- C#里面有没有类似excel一样的控件,可以添加多行多列的信息,并且可以手工添加删除之类的,谢谢
- 问个简单问题,有关类的
- WCF转发问题
- 在线等!!!在windows 2003中在asp中使用post方法出现405错
- 如何取得本机网卡的MAC地址,IP地址?
- winForm中怎样让MDI的子窗口不能移动?
- 关于获取服务器性能参数的难题?
- 这个问题如何解决? Microsoft Visual Studio is waiting for an internal operation to complete
public class Users
{
public string about;
public Member member = new Member();//应该是个集合吧
}
public class Users
{
public string about;
public Member member;//在这里new可能会有影响,它会在构造函数执行前就出发这个动作
public Users()
{
member = new Member();
}
}
{
if(content.Length==0)
return null;
try
{
BinaryFormatter binaryFormatter=new BinaryFormatter();
MemoryStream ms=new MemoryStream();
ms.Write(content,0,content.Length);
ms.Position=0;
return (object)binaryFormatter.Deserialize(ms);
}
catch(Exception ex)
{
ex.ToString();
}
return null; }
public byte[] SerializeBinary(object obj)
{
if(obj==null)
return null;
try
{
BinaryFormatter biaryFormatter=new BinaryFormatter();
MemoryStream ms=new MemoryStream();
biaryFormatter.Serialize(ms,obj);
ms.Position=0;
byte[] content=new Byte[ms.Length];
ms.Read(content,0,content.Length);
ms.Close();
return content;
}
catch{}
return null;
}
SqlCommand sqlCommand = new SqlCommand("testser", new SqlConnection(strConn));
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.Add(new SqlParameter("@about", SqlDbType.Image));//?? sqlCommand.Parameters["@about"].Value = writeIn;
sqlCommand.Connection.Open();
sqlCommand.ExecuteNonQuery();
sqlCommand.Connection.Close();
sqlCommand.Connection.Dispose();
Console.WriteLine("end");我觉得是 存储过程的 有点问题,声明的变量可能前后引用的不一致导致的, 检查看下
改成 writeIn = stream.GetBuffer();原因是stream.Length的类型是long,转换成int后,丢失了数据