A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 赵威 于 2013-4-29 08:56 编辑

//这是序列化的代码
amespace _练习
{
    class Program
    {
        static void Main(string[] args)
        {
            Person p1=new Person ();
            p1.Name ="zw";
            p1.Gender ="m";
            p1.Age =18;
            //序列化第一步,创建一个序列化器
            BinaryFormatter bf = new BinaryFormatter();
            //序列化第二步,创建一个写入流
            using(FileStream fsWrite=new FileStream ("aaaa.zw",FileMode.Create ))
            {
                //序列化第三步,开始序列化
                bf.Serialize(fsWrite, p1);
            }
            Console.WriteLine("序列化成功");
            Console.ReadKey();
        }
    }
    [Serializable]
    public class Person
    {
        public string Name
        {
            get;
            set;
        }
        public string Gender
        {
            get;
            set;
        }
        public int Age
        {
            get;
            set;
        }
    }
}
//下面是反序列化的代码
namespace 反序列化
{
    class Program
    {
        static void Main(string[] args)
        {
            //第一步,创建一个反序列化器
            BinaryFormatter bf = new BinaryFormatter();
            //第二步,创建一个读取流
            using (FileStream fsRead = new FileStream(@"E:\艾尔的东西\新建文件夹\aaaa.zw", FileMode.Open))
            {
                //第三步,开始反序列化
                object obj=bf.Deserialize(fsRead);
                Person p2 = new Person();
                Console.WriteLine(p2.Name );
                Console.WriteLine(p2.Age );
                Console.WriteLine(p2.Gender );
            }
            
            Console.WriteLine("反序列化成功");
            Console.ReadKey();
        }
    }
}
本来反序列化应该出来的是:zw,m,18。但出现的却是下面的情况,这是为什么,哪里出错了?


结果出问题了????.jpg (21.37 KB, 下载次数: 0)

结果出问题了????.jpg

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

5 个回复

正序浏览
王杨武 发表于 2013-4-28 20:26
你在反序列化的的时候需要数据转换.所以一般 在文件反序列化的流中要实现数据类型转换.一般采用 as 进行数 ...

就是你说的那么回事,Person per=obj as Person;
多谢
回复 使用道具 举报
郑丹丹1990 发表于 2013-4-28 18:35
这个正确。

晓得了,多谢
回复 使用道具 举报
你在反序列化的的时候需要数据转换.所以一般 在文件反序列化的流中要实现数据类型转换.一般采用 as 进行数据转换.

谢谢 ,Alian为您解答
回复 使用道具 举报
  1. //第三步,开始反序列化
  2.                 object obj = bf.Deserialize(fsRead);
  3.                 Person p2 =(Person)obj;
  4.                 Console.WriteLine(p2.Name);
  5.                 Console.WriteLine(p2.Age);
  6.                 Console.WriteLine(p2.Gender);
复制代码
这个正确。
回复 使用道具 举报
  1. Person p2 = new Person();
  2.                 Console.WriteLine(p2.Name);
  3.                 Console.WriteLine(p2.Age);
  4.                 Console.WriteLine(p2.Gender);
复制代码
序列化我不懂,但你声明一个新的person,从你的从代码上来看,和fsRead 没有一点的关系。
p2为空。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马