在C#中实现对象序列化的几种常用方式

 更新时间:2026年04月14日 08:36:58   作者:深圳市由你创科技  
文章主要介绍了实现对象序列化之前的准备工作,以及在C#中实现对象序列化主要有二进制序列化、XML序列化和JSON序列化三种常用方式,并对每种方式的具体实现进行了说明,需要的朋友可以参考下

在实现之前,先要做一些准备工作,序列化其实是对象和字符串(文件)之间的互相转换,所以首先我们准备好一个实体类,很简单的Person类:

using System.Text.Json;
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Email { get; set; }
}
Person person = new Person { Name = "张三", Age = 25, Email = "zhang@example.com" };

在 C# 中实现对象序列化主要有以下几种常用方式:

一、二进制

二进制序列化及反序列化的方式主要是使用BinaryFormatter这个类,类名上面要加上[Serializable],不加无法序列化,序列化代码如下:

[Serializable]
public class Person { 
   public string Name { get; set; } 
   public int Age { get; set; } 
   public string Email { get; set; } 
}
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream fs = new FileStream("data.bin", FileMode.Create))
{
    formatter.Serialize(fs, person );
}
// 反序列化
using (FileStream fs = new FileStream("data.bin", FileMode.Open))
{
    DataObject deserializedObj = (DataObject)formatter.Deserialize(fs);
}

二、XML

XML序列化可提高可读性,以及对象共享和使用的灵活性,XML序列化将对象的公共字段和属性或方法的参数和返回值序列化成符合特定XML格式的流。

XML序列化代码如下:

[Serializable]
public class Person { 
  public string Name { get; set; } 
  public int Age { get; set; } 
  public string Email { get; set; } 
}
using System.Xml.Serialization;
using System.IO;
XmlSerializer serializer = new XmlSerializer(typeof(Person));
using (StringWriter writer = new StringWriter())
{
    serializer.Serialize(writer, person);
    string xmlString = writer.ToString();
    Console.WriteLine(xmlString);
}
// 反序列化
using (StringReader reader = new StringReader(xmlString))
{
    Person deserializedObj = (Employee)serializer.Deserialize(reader);
}

三、JSON

JSON序列化是目前使用很多的一种方式,实现JSON序列化的方式也有很多,一般会使用NewSoft.Json这个库来做,可以通过Nuget搜索安装。

// 序列化
string json = JsonConvert.SerializeObject(person);
// 反序列化
Product deserializedProduct = JsonConvert.DeserializeObject<Person>(json);
// 格式化输出
string formattedJson = JsonConvert.SerializeObject(product, Formatting.Indented);

到此这篇关于在C#中实现对象序列化的几种常用方式的文章就介绍到这了,更多相关C#对象序列化方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • c# 实现子窗口关闭父窗口也关闭的方法

    c# 实现子窗口关闭父窗口也关闭的方法

    下面小编就为大家带来一篇c# 实现子窗口关闭父窗口也关闭的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • C#代码实现设置Word文档页面(页面大小、边距、方向)

    C#代码实现设置Word文档页面(页面大小、边距、方向)

    本文基于 Free Spire.Doc for .NET 免费库,介绍如何通过 C# 代码实现对 Word 文档页面的灵活控制,包括设置页面尺寸、方向、边距,以及在同一文档中使用多个不同布局的节,希望对大家有所帮助
    2026-03-03
  • C#中的命名空间详解(Namespace)

    C#中的命名空间详解(Namespace)

    文章介绍了命名空间在C#编程中的作用,包括命名空间的定义与使用、using关键字的使用以及嵌套命名空间的实现,通过这些机制,开发者可以有效地组织和隔离代码,避免命名冲突,提高代码的可读性和可维护性
    2024-12-12
  • C#七大经典排序算法系列(上)

    C#七大经典排序算法系列(上)

    这篇文章主要为大家详细介绍了C#七大经典排序算法系列上篇,冒泡排序,快速排序等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • c# Process.Start()找不到系统文件的解决方法

    c# Process.Start()找不到系统文件的解决方法

    vs1027在X64应用程序下执行process.start()时,OK;但是在X86应用程序下执行process.start(),报错:找不到系统文件,本文就详细的介绍一下解决方法,感兴趣的可以了解一下
    2023-09-09
  • C#中Func委托的实现

    C#中Func委托的实现

    Func是C#中的泛型委托,用于封装具有返回值的方法,支持最多16个输入参数,并始终返回最后一个泛型参数指定的类型,下面就来详细的介绍一下Func委托的使用,感兴趣的可以了解一下
    2025-11-11
  • C#调用EXE文件实现传参和获取返回结果

    C#调用EXE文件实现传参和获取返回结果

    本文主要介绍了C#调用EXE文件实现传参和获取返回结果,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 浅析C#中ref与out参数传递的核心区别与实战指南

    浅析C#中ref与out参数传递的核心区别与实战指南

    这篇文章为大家系统梳理了C#中ref与out参数传递的核心区别与使用场景,ref用于双向传递,调用前必须初始化,方法内可读写,out用于单向输出,方法内必须赋值,调用前无需初始化,下面小编就和大家详细介绍一下吧
    2026-02-02
  • C#实现微信跳一跳小游戏的自动跳跃助手开发实战

    C#实现微信跳一跳小游戏的自动跳跃助手开发实战

    前段时间微信更新了新版本后,带来的一款H5小游戏“跳一跳”在各朋友圈里又火了起来,类似以前的“打飞机”游戏,这游戏玩法简单,但加上了积分排名功能后,却成了“装逼”的地方,于是很多人花钱花时间的刷积分抢排名
    2018-01-01
  • 六大设计原则之开闭原则

    六大设计原则之开闭原则

    这篇文章介绍了六大设计原则之开闭原则,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02

最新评论