C#实现对象的序列化和反序列化

C#实现对象的序列化和反序列化

在C#中,我们可以使用对象的序列化和反序列化将对象转换为字节流,并将其保存到文件中或发送到网络。在本文中,我们将介绍如何使用C#实现对象的序列化和反序列化。

什么是对象序列化?

序列化是指将一个对象转换为字节流的过程。序列化后的对象可以保存在文件中或通过网络发送。当我们需要在不同的应用程序或服务器之间传输数据时,序列化是一种非常方便的方式。

如何实现对象序列化?

在C#中,我们可以使用.NET的序列化类来实现对象的序列化。首先,我们需要在对象的类定义前面添加[Serializable]属性,用于标识该类是可序列化的。例如,我们有一个Person类:

[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

接下来,我们可以使用BinaryFormatter类将Person类序列化并保存在文件中:

Person person = new Person()
{
    Name = "Tom",
    Age = 18
};

BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream("person.bin", FileMode.Create))
{
    formatter.Serialize(stream, person);
}

在上面的代码中,我们首先创建了一个Person对象,然后使用BinaryFormatter类将该对象序列化并保存在名为person.bin的文件中。

如何实现对象的反序列化?

反序列化是指将一个字节流转换回对象的过程。在C#中,我们可以使用BinaryFormatter类反序列化一个对象。下面是一个简单的示例:

using (FileStream stream = new FileStream("person.bin", FileMode.Open))
{
    Person person = (Person)formatter.Deserialize(stream);
    Console.WriteLine(person.Name); // 输出: Tom
    Console.WriteLine(person.Age); // 输出: 18
}

在上面的代码中,我们使用FileSteam类打开之前保存的person.bin文件,然后使用BinaryFormatter类将其反序列化回Person对象。

示例说明

接下来,我们将通过两个示例来说明如何使用C#实现对象的序列化和反序列化。

示例一:使用XML格式序列化和反序列化

在示例一中,我们将使用XML格式来序列化和反序列化一个Person对象,并将其保存在一个XML文件中。

首先,我们需要在Person类定义前加上[Serializable]标识:

[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

然后,我们可以使用XmlSerializer类来序列化和反序列化Person对象。下面是两个示例:

// 序列化
Person person = new Person()
{
    Name = "Tom",
    Age = 18
};

XmlSerializer serializer = new XmlSerializer(typeof(Person));
using (TextWriter writer = new StreamWriter("person.xml"))
{
    serializer.Serialize(writer, person);
}

// 反序列化
XmlSerializer serializer = new XmlSerializer(typeof(Person));
using (TextReader reader = new StreamReader("person.xml"))
{
    Person person = (Person)serializer.Deserialize(reader);
    Console.WriteLine(person.Name); // 输出: Tom
    Console.WriteLine(person.Age); // 输出: 18
}

在上面的代码中,我们使用XmlSerializer类来序列化和反序列化一个Person对象。调用Serialize方法将Person对象序列化为XML,并保存在person.xml文件中。调用Deserialize方法从person.xml文件读取XML,并将其反序列化回Person对象。

示例二:使用JSON格式序列化和反序列化

在示例二中,我们将使用JSON格式来序列化和反序列化一个Person对象,并将其保存在一个JSON文件中。

我们需要使用JSON.NET库来实现JSON格式的序列化和反序列化。我们可以使用NuGet安装程序安装JSON.NET库。

首先,我们需要在Person类定义前加上[JsonProperty]相关标识:

public class Person
{
    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("age")]
    public int Age { get; set; }
}

然后,我们可以使用JsonConvert类来序列化和反序列化Person对象。下面是两个示例:

// 序列化
Person person = new Person()
{
    Name = "Tom",
    Age = 18
};

string json = JsonConvert.SerializeObject(person);
File.WriteAllText("person.json", json);

// 反序列化
string json = File.ReadAllText("person.json");
Person person = JsonConvert.DeserializeObject<Person>(json);

Console.WriteLine(person.Name); // 输出: Tom
Console.WriteLine(person.Age); // 输出: 18

在上面的代码中,我们使用JsonConvert类来序列化和反序列化一个Person对象。调用SerializeObject方法将Person对象序列化为JSON,并将其保存在person.json文件中。调用DeserializeObject方法从person.json文件读取JSON,并将其反序列化回Person对象。

总结

使用C#实现对象序列化和反序列化非常简单。我们只需要添加[Serializable]属性并使用.NET的序列化类即可实现对象的序列化和反序列化。此外,我们还可以使用XML和JSON格式来序列化和反序列化一个对象,这可以通过XmlSerializer和JsonConvert类来实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现对象的序列化和反序列化 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 关于C#基础知识回顾–反射(三)

    关于C#基础知识回顾–反射(三)这篇文章的完整攻略如下: 一、反射简介 1.1 反射的概念 反射(Reflection)是指在程序运行的时候访问、检测和修改程序集中的元数据和对象的方式。反射用于访问 .NET 中的元数据,这种元数据描述了程序集(assembly)、模块(module)和类型(type)等。通过元数据,我们可以获取类型信息,了解类的结构和成…

    C# 2023年6月1日
    00
  • sqlserver利用存储过程去除重复行的sql语句

    sqlserver利用存储过程去除重复行的SQL语句攻略: 创建存储过程 首先需要在SQL Server中创建存储过程,以下是示例代码: CREATE PROCEDURE RemoveDuplicateRows AS BEGIN SET NOCOUNT ON; SELECT DISTINCT * INTO #TempTable FROM YourTableN…

    C# 2023年6月2日
    00
  • asp.net php asp jsp 301重定向的代码(集合)

    下面是详细讲解“asp.net php asp jsp 301重定向的代码(集合)”的完整攻略: 什么是301重定向? 301重定向是将一个URL的请求永久性转移到另一个URL的过程。它通常用于网站改版或重构时,将旧的不再使用的URL地址重定向到新的页面地址,不影响用户体验,同时也有利于搜索引擎的优化。 asp.net实现301重定向的代码 在asp.net…

    C# 2023年5月31日
    00
  • C#匿名方法与Delegate类型转换错误分析

    下面我来详细讲解一下C#匿名方法与Delegate类型转换错误分析的完整攻略。 什么是匿名方法 匿名方法是在C#2.0中新增的特性,它可以在运行时动态地创建一段匿名代码块。匿名方法可以作为方法参数,或赋值给一个委托类型的变量,以便在稍后时间执行。 匿名方法的语法如下: delegate(parameters) { /* 方法体 */ } 其中,delegat…

    C# 2023年5月15日
    00
  • C#实现刷新桌面的方法

    下面是“C#实现刷新桌面的方法”的完整攻略。 标题 介绍 在Windows系统中,桌面通常是我们经常使用的界面之一。有时候我们需要在程序中通过代码控制桌面的刷新,例如动态修改桌面背景等。本攻略将介绍如何通过C#代码实现刷新桌面的方法。 方法 在C#中,可以通过发送一条特定的消息显式地强制Windows桌面刷新。具体实现步骤如下: 步骤1 在代码中引入下列命名…

    C# 2023年6月1日
    00
  • C# 获取进程退出代码的实现示例

    C# 获取进程退出代码的实现示例包括以下步骤: 获取进程对象 可以使用Process类来获取指定进程的对象,代码如下: Process process = Process.GetProcessById(processId); 其中,processId为进程的ID号。如果希望通过进程的名称来获取进程对象,可以使用以下代码: Process process = …

    C# 2023年5月31日
    00
  • IdentityServer4 QuckStart 授权与自定义Claims的问题

    下面我会详细讲解 IdentityServer4 QuckStart 授权与自定义Claims 的问题,并提供两条示例说明。 什么是 IdentityServer4 QuckStart? IdentityServer4 是一款基于 ASP.NET Core 的开源身份验证和授权服务器。通过 IdentityServer4,我们可以为我们的应用程序提供安全保护…

    C# 2023年6月3日
    00
  • C#中使用@声明变量示例(逐字标识符)

    C#中使用@声明变量的方式又被称为逐字(verbatim)标识符。这种方式可以避免C#关键字与变量名冲突的问题,同时也支持在字符串中直接输出换行符和制表符等特殊字符,非常实用。下面我们详细讲解一下如何使用@声明变量。 基本语法 使用@声明变量的基本语法如下: @变量名 = 值 其中,@符号紧贴变量名,表示对变量名进行逐字标识符声明。 示例一 下面来看一个简单…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部