千家信息网

C#如何实现序列化和反序列化

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章给大家分享的是有关C#如何实现序列化和反序列化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。.net下有一种技术叫做对象序列化,说得通俗一点,C#序列化就是把一个对
千家信息网最后更新 2026年11月02日C#如何实现序列化和反序列化

这篇文章给大家分享的是有关C#如何实现序列化和反序列化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

.net下有一种技术叫做对象序列化,说得通俗一点,C#序列化就是把一个对象保存到一个文件或数据库字段中去,C#反序列化就是在需要的时候再把这个文件转化成原来的对象使用。

在.NET中常见的C#序列化的方法主要也有三个:二进制序列化、XML序列化、SOAP序列化。

下面通过一个小例子来说明这三种方法的使用。

using System;  using System.Collections.Generic;  using System.Text;   namespace FileSerializer  {      [Serializable]      public class Book      {                string id;          string name;           public string Id          {              get { return id; }              set { id = value; }          }           public string Name          {              get { return name; }              set { name = value; }          }                    public Book()          {          }           public Book(string id,string name)          {              this.id = id;              this.name = name;          }           public override string ToString()          {              return "编号:" + id + "\t名称:" + name;          }      }  }   using System;  using System.Collections.Generic;  using System.Text;  using System.IO;  using System.Xml.Serialization;   namespace FileSerializer  {      public abstract class Serializer< T>      {          string filePath;           public string FilePath          {              get { return filePath; }              set { filePath = value; }          }           public Serializer(string filePath)          {              this.filePath = filePath;          }           public void Serialize(T serializeObj)          {              using (Stream st = new FileStream(filePath, FileMode.Create, FileAccess.Write))              {                  S(st, serializeObj);              }          }           protected abstract void S(Stream st, T serializeObj);           public T Deserialize()          {              using (Stream st = new FileStream(filePath, FileMode.Open, FileAccess.Read))              {                  return D(st);              }          }           protected abstract T D(Stream st);      }  }   using System;  using System.Collections.Generic;  using System.Text;  using System.IO;  using System.Runtime.Serialization.Formatters.Binary;   namespace FileSerializer  {      class SerializerBinary< T> : Serializer< T>      {          public SerializerBinary(string filePath)              : base(filePath)          {          }          protected override void S(Stream st, T serializeObj)          {              BinaryFormatter bf = new BinaryFormatter();              bf.Serialize(st, serializeObj);          }           protected override T D(Stream st)          {              BinaryFormatter bf = new BinaryFormatter();              return (T)bf.Deserialize(st);          }      }  }   using System;  using System.Collections.Generic;  using System.Text;  using System.IO;  using System.Runtime.Serialization.Formatters.Soap;   namespace FileSerializer  {      public class SerializerSoap< T> : Serializer< T>      {          public SerializerSoap(string filePath)              : base(filePath)          {          }           protected override void S(Stream st, T serializeObj)          {              SoapFormatter sf = new SoapFormatter();              sf.Serialize(st, serializeObj);          }           protected override T D(Stream st)          {              SoapFormatter sf = new SoapFormatter();              return (T)sf.Deserialize(st);          }      }  }    using System;  using System.Collections.Generic;  using System.Text;  using System.Xml.Serialization;  using System.IO;   namespace FileSerializer  {      public class SerializerXml< T> : Serializer< T>      {          public SerializerXml(string filePath)              : base(filePath)          {          }           protected override void S(Stream st, T serializeObj)          {              XmlSerializer xs = new XmlSerializer(typeof(T));              xs.Serialize(st, serializeObj);          }           protected override T D(Stream st)          {              XmlSerializer xs = new XmlSerializer(typeof(T));              return (T)xs.Deserialize(st);          }      }  }    using System;  using System.Collections.Generic;  using System.Text;   namespace FileSerializer  {      class Program      {          static void Main(string[] args)          {              Book book = new Book("01","C#程序设计入门01");              Serializer< Book> serializer = new SerializerBinary< Book>("bookBinary");              serializer.Serialize(book);               Book newbook = serializer.Deserialize();              Console.WriteLine(newbook.ToString());                   book = new Book("02", "C#程序设计入门02");              serializer = new SerializerSoap< Book>("bookSoap.soap");              serializer.Serialize(book);               newbook = serializer.Deserialize();              Console.WriteLine(newbook.ToString());               book = new Book("03", "C#程序设计入门03");              serializer = new SerializerXml< Book>("bookXml.xml");              serializer.Serialize(book);               newbook = serializer.Deserialize();              Console.WriteLine(newbook.ToString());              Console.ReadLine();          }      }  }

感谢各位的阅读!关于"C#如何实现序列化和反序列化"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

序列 C# 对象 程序 程序设计 设计 内容 就是 文件 方法 更多 篇文章 不错 实用 通俗 三个 下有 二进制 例子 名称 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 山东特亿宝互联网科技有限公司 中国互联网科技工作委员会毛军 互联网与科技金融数据 亿策互联网科技 成都互联网科技公司 顺玮阁互联网科技 互联网科技公司介绍 老年人脱离互联网科技的作文 科技赋能互联网健康 科技与互联网哪个更好 互联网时代科技改变生活 湖北码尼互联网科技有限公司电话 华夏互联网科技业 特约风豹互联网科技为什么扣费 中和天地互联网科技有限公司 众安科技工业互联网合作 沐思想互联网科技有限公司 好易买互联网科技 互联网领先科技成果宣传视频 六子台科技互联网展会 湖北九亚互联网络科技有限公司 互联网科技工作委员会副主任毛军 科技金融是不是互联网金融 宜安科技 互联网金融 互联网科技博客 上海电发互联网科技有限公司 晓花互联网科技有限公司网址 科技类公司包括互联网吗 西安小鹰速贷互联网科技有限公司 互联网大会出现的黑科技
0