栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

C#常用的三种序列化

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#常用的三种序列化

序列化与反序列化
  • 定义
    • 作用
    • 序列化步骤
    • 反序列化
    • 下面我们来学习序列化为xml格式文件
    • 第三种protobuf序列化与反序列化
      • 定义:Protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多。除了比Json、XML有速度上的优势和使用上的方便外,protocolbuf还可以做到向前兼容和向后兼容。
      • 步骤

定义

序列化:就是将对象转换为二进制
反序列化:二进制转换为对象

作用

作用:传输数据

序列化步骤
  1. 在类前加上[Serializable],指示一个类可以序列化。
  2. 创建序列化对象 BinaryFormatter
  3. 调用Serialize 序列化

如下面例子,生成一个二进制文件

public class Person
    {
        private string _name;
        private char _gender;
        private int _age;       
        public string Name { get => _name; set => _name = value; }
        public char Gender { get => _gender; set => _gender = value; }
        public int Age { get => _age; set => _age = value; }
    }
    

调用

static void Main(string[] args)
        {
            Person p = new Person();
            p.Name = "张三";
            p.Age = 18;
            p.Gender = '男';
            using (FileStream fsWrite = new FileStream(@"C:UsershpDesktop1.txt", FileMode.OpenOrCreate, FileAccess.Write))
            {
                //序列化对象
                BinaryFormatter f = new BinaryFormatter();
                f.Serialize(fsWrite, p);
               
            }
        }
反序列化
  1. 在类前加上[Serializable],指示一个类可以序列化。
  2. 创建序列化对象 BinaryFormatter
  3. 调用Deserialize 序列化
 Person p;
            using (FileStream fsRead = new FileStream(@"C:UsershpDesktop1.txt",FileMode.OpenOrCreate,FileAccess.Read))
            {
                //创建反序列化对象
                BinaryFormatter bf = new BinaryFormatter();
                p = (Person)bf.Deserialize(fsRead); 
            }
            Console.WriteLine(p.Name);
            Console.WriteLine(p.Gender);
            Console.WriteLine(p.Age);
            Console.ReadKey();

打印效果

下面我们来学习序列化为xml格式文件
  1. 创建xml序列化对象 XmlSerializer
  2. 调用 Serialize 反序列化 Deserialize
  public struct pca
    {
        public string ID;
        public string SN;
        public string X;
        public string Y;
        public string Angle;
    }
private void button3_Click(object sender, EventArgs e)
        {
            pca p = new pca();
            p.ID = textBox1.Text;
            p.SN = textBox2.Text;
            p.X = textBox3.Text;
            p.Y = textBox4.Text;
            p.Angle = textBox5.Text;

            string path = @"C:UsershpDesktop5.xml";
            //创建 xml序列化对象
            

            using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
            {
                XmlSerializer xs = new XmlSerializer(typeof(pca));
                xs.Serialize(fs, p);

            }
            MessageBox.Show("保存成功");
        }

        private void button2_Click(object sender, EventArgs e)
        {
        //反序列化
            string path = @"C:UsershpDesktop5.xml";
            XmlSerializer xs = new XmlSerializer(typeof(pca));
            pca p;
            using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
              p=(pca)  xs.Deserialize(fs);
            }
            textBox1.Text = p.ID ;
            textBox2.Text= p.SN ;
            textBox3.Text= p.X ;
             textBox4.Text= p.Y ;
             textBox5.Text= p.Angle;

        }
第三种protobuf序列化与反序列化 定义:Protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多。除了比Json、XML有速度上的优势和使用上的方便外,protocolbuf还可以做到向前兼容和向后兼容。 步骤
  1. 添加protobuf-net.dll,System.Memory.dll,protobuf-net.Core.dll引用文件到项目中dll文件下载
  2. 引用 using protobuf;
  3. 将类用[protoContract]标记为可以用protobuf工具可序列化
  4. 在字段或属性//添加特性,表示该属性可以被序列化,1可以理解为下标(基本成员)
  5. 调用Serializer.Serialize<类型>(fsWrite, p);序列化
 //序列化对象
            Person p = new Person();
            p.Name = "张三";
            p.Age = 19;
            p.Gender = '男';
            using (FileStream fsWrite = new FileStream(@"C:UsershpDesktop6.txt", FileMode.OpenOrCreate, FileAccess.Write))
            {
                //序列化对象
                Serializer.Serialize(fsWrite, p);

            }
            Console.WriteLine("序列化成功");
            Console.ReadKey();


//反序列化
            Person p1;
            using (var fs = new FileStream(@"C:UsershpDesktop6.txt", FileMode.Open, FileAccess.Read))
            {
                p1 = Serializer.Deserialize(fs);
            }
                Console.WriteLine("反序列化成功");
            Console.WriteLine(p1.Age + p1.Name + p1.Gender);
            Console.ReadKey();
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1023520.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号