黑马程序员技术交流社区

标题: 反序列化的时候为什么没有得到原来的结果?? [打印本页]

作者: 赵威    时间: 2013-4-28 18:13
标题: 反序列化的时候为什么没有得到原来的结果??
本帖最后由 赵威 于 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

作者: 郑丹丹1990    时间: 2013-4-28 18:34
  1. Person p2 = new Person();
  2.                 Console.WriteLine(p2.Name);
  3.                 Console.WriteLine(p2.Age);
  4.                 Console.WriteLine(p2.Gender);
复制代码
序列化我不懂,但你声明一个新的person,从你的从代码上来看,和fsRead 没有一点的关系。
p2为空。
作者: 郑丹丹1990    时间: 2013-4-28 18:35
  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);
复制代码
这个正确。
作者: 王杨武    时间: 2013-4-28 20:26
你在反序列化的的时候需要数据转换.所以一般 在文件反序列化的流中要实现数据类型转换.一般采用 as 进行数据转换.

谢谢 ,Alian为您解答
作者: 赵威    时间: 2013-4-29 08:54
郑丹丹1990 发表于 2013-4-28 18:35
这个正确。

晓得了,多谢
作者: 赵威    时间: 2013-4-29 08:55
王杨武 发表于 2013-4-28 20:26
你在反序列化的的时候需要数据转换.所以一般 在文件反序列化的流中要实现数据类型转换.一般采用 as 进行数 ...

就是你说的那么回事,Person per=obj as Person;
多谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2