求助关于序列化和反序列化

chusky 2005-01-17 12:16:18
为什么用一个进程序列化后的数据文件前面会有这个进程的名称版本等信息
而用另外一个进程对该文件凡序列化时却发生异常,难道一定要用同一个进程去反序列化吗?

经检查的确如此!!
这样好像不太好吧

请问是我弄错了,还是有别的解决方法

新手上路,问题比较多,希望各位耐心赐教
...全文
213 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdenli 2005-01-19
  • 打赏
  • 举报
回复
gz
zhaweiping 2005-01-19
  • 打赏
  • 举报
回复
为什么不把序列化到硬盘上如:.xml文件,放载流里不好访问的八
Jim3 2005-01-19
  • 打赏
  • 举报
回复
一个程序序列化,另外一个程序反序列化是可以的

唯一要保证就是那个类所在的Assembly是一样的
Jim3 2005-01-19
  • 打赏
  • 举报
回复
为什么用一个进程序列化后的数据文件前面会有这个进程的名称版本等信息
^^^^
不是进程的,是Assembly以及你这个要序列化的类的名称版本等,反序列化时
将根据这些信息找到这个类,实例化,并给相应的属性赋值

所以反序列化时要确保同一个版本的Assembly在应用程序的搜索目录下
Eddie005 2005-01-19
  • 打赏
  • 举报
回复
序列化和反序列化
   首先这个类必须是可序列化的,例如DataTable,又或者下面这样:
[Serializable]
public class GradResume
{
/// <summary>
/// 用户ID。
/// </summary>
public string UserID;

/// <summary>
/// 登录名。
/// </summary>
public string UserName;
.......................

序列化和反序列化的代码如下:
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization.Formatters.Binary;
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
//新建类GradResume的实例
GradResume aaa = new GradResume();
aaa.UserID = "123";
aaa.UserName = "eddiezhong";


//序列化对象
BinaryFormatter binaryFormatter = new BinaryFormatter();
System.IO.MemoryStream mStm1 = new System.IO.MemoryStream();
binaryFormatter.Serialize(mStm1,aaa);

byte[] tmpBytes = mStm1.ToArray();
mStm1.Close();
//tmpBytes就可以用来保存数据库或者写文件

//读数据库或者文件文件重新获得tmpBytes

//反序列化二进制数组
System.IO.MemoryStream mStm2 = new System.IO.MemoryStream(tmpBytes);
mStm2.Position = 0;
object newObj = binaryFormatter.Deserialize(mStm2);
mStm2.Close();

//得到GradResume对象
GradResume bbb = (GradResume)newObj;
this.TextBox1.Text = bbb.UserID;
this.TextBox2.Text = bbb.UserName;
chusky 2005-01-18
  • 打赏
  • 举报
回复
还不懂,自己顶一下
mrguo 2005-01-17
  • 打赏
  • 举报
回复
查查这个东西看看StringStream
健者天行 2005-01-17
  • 打赏
  • 举报
回复
UP
gOODiDEA 2005-01-17
  • 打赏
  • 举报
回复
public static MemoryStream SerializeBinary( object request )
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
binaryFormatter.Serialize( memoryStream, request );
return memoryStream;
}

public static object DeserializeBinary( MemoryStream memoryStream )
{
memoryStream.Position = 0;
BinaryFormatter binaryFormatter = new BinaryFormatter();
object newObj = binaryFormatter.Deserialize( memoryStream );
memoryStream.Close();
return newObj;
}

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧