黑马程序员技术交流社区
标题:
关于反序列化
[打印本页]
作者:
陈顺亮
时间:
2012-10-6 19:11
标题:
关于反序列化
本帖最后由 陈顺亮 于 2012-10-6 22:10 编辑
从别人电脑传过来一个序列化的文本文件,如何对其进行反序列化,来个具体实例看看把
作者:
和志强
时间:
2012-10-6 21:39
是不是在反序列化的时候出现:
无法找到程序集“XXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”。这个异常那
如果是这个异常请咨询您的好基友,他序列化时所用的程序集的命名空间名,类名,字段,属性,字段类型,然后写一个和好基友上述内容一样的命名空间名,类名,等等,再反序列化,即可
作者:
神马王刚
时间:
2012-10-6 21:40
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Lesson2
{
[Serializable]
public class Person
{
// 让用户输入姓名 年龄 性别 住址 邮箱 血型 职业 毕业学校
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private string _gender;
public string Gender
{
get { return _gender; }
set { _gender = value; }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
private string _adress;
public string Adress
{
get { return _adress; }
set { _adress = value; }
}
private string _email;
public string Email
{
get { return _email; }
set { _email = value; }
}
private string _typeofblood;
public string Typeofblood
{
get { return _typeofblood; }
set { _typeofblood = value; }
}
private string _job;
public string Job
{
get { return _job; }
set { _job = value; }
}
private string _graduateSchool;
public string GraduateSchool
{
get { return _graduateSchool; }
set { _graduateSchool = value; }
}
}
}
以上为Person类
string path = @"D:\DiduTimes\CsharpSelfDoc\20121006\456.txt";//读取别人序列化后的记事本文档
//比如456记事本中存的是" >Lesson2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null Lesson2.Person _name_gender_age_adress_email_typeofblood_job_graduateSchool 绐﹀Ξ濠? 濂? 鍖椾含 douniwan@itcast.cn o 瀛︾敓 鍖楀ぇ";可以将引号里的内容粘贴到记事本文档中并命名为456.txt
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))//可读
{
BinaryFormatter bf = new BinaryFormatter();
p = (Person)bf.Deserialize(fs);//反序列化,用里氏转换为Person类
}
Console.WriteLine(p.Name);
Console.WriteLine(p.Age);
Console.WriteLine(p.Gender);
Console.WriteLine(p.Typeofblood);
Console.WriteLine(p.Adress);
Console.WriteLine(p.Email);
Console.WriteLine(p.Job);
Console.WriteLine(p.GraduateSchool);//输出实例化对象的信息
Console.ReadKey();
序列化时,可写状态,bf.Serialize(fs, p);序列化时,参数除了要实例化后的文件流,还要输入实例化的对象名
反序列化时,可读状态,p = (Person)bf.Deserialize(fs);反序列化,只需要实例化后的文件流,但是需要里氏转换类型,然后用实例化的对象名来接收,通过对象.属性输出显示所存储的值.
复制代码
作者:
邓艳秋
时间:
2012-10-6 21:52
类名,属性,字段都要一样。
再用
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Write))
{
BinaryFormatter bf = new BinaryFormatter();
str = (string[])bf.Deserialize(fs);
}
for (int i = 0; i < str.Length; i++)
{
Console.WriteLine(str[i]);
}
就可以达到反序列化的效果了。
作者:
陈顺亮
时间:
2012-10-6 22:10
我还能说什么呢。。。。。。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2