c#对象反序列化与对象序列化示例详解

yizhihongxing

介绍

首先我们需要明确一下对象序列化与反序列化的概念,对象序列化就是将对象转化为可以存储或传输的格式。相反,反序列化表示将存储格式或传输格式转化为对象。

C#语言提供了一个方便的API,可以使用这个API轻松地将对象序列化和反序列化。这个API被称为“System.Runtime.Serialization”。

C#对象序列化示例

接下来我们将演示如何使用C#对象序列化,我们将会创建一个Person类,并使用此类的实例来演示对象序列化和反序列化。下面是Person类的结构。

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

首先,我们需要将Person对象序列化并存储到文件中。以下是序列化一个Person对象的示例代码。

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace Serialization
{
    [Serializable]
    public class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int Age { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // Create a new Person object
            var person = new Person
            {
                FirstName = "John",
                LastName = "Doe",
                Age = 30
            };

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

            Console.WriteLine("Person object serialized successfully.");
        }
    }
}

在上面的示例中,我们首先创建了一个名为“person”的Person对象。接下来,我们使用BinaryFormatter类序列化这个对象,并将其存储在名为“person.bin”的文件中。使用“using”块,我们可以确保文件流在执行完序列化后自动被关闭。最后,我们输出一条消息“序列化成功”。

C#对象反序列化示例

下面我们将演示如何使用C#对象反序列化。在这个示例中,我们将从文件中反序列化一个Person对象。以下是完整的代码示例。

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace Serialization
{
    [Serializable]
    public class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int Age { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // Deserializing Person object
            BinaryFormatter formatter = new BinaryFormatter();
            using (FileStream stream = new FileStream("person.bin", FileMode.Open))
            {
                Person person = (Person)formatter.Deserialize(stream);
                Console.WriteLine("Person object deserialized successfully.");
                Console.WriteLine("First name: " + person.FirstName);
                Console.WriteLine("Last name: " + person.LastName);
                Console.WriteLine("Age: " + person.Age);
            }
        }
    }
}

在上面的代码示例中,我们首先使用BinaryFormatter类反序列化Person对象,并从名为“person.bin”的文件中读取该对象。一旦反序列化成功,我们将Person对象分配给“person”变量。最后,我们输出了反序列化后的Person对象的数据。如果一切顺利,你将看到一条消息“反序列化成功”并显示Person对象的数据。

结束语

希望上述示例能够帮助你更好地理解C#中的对象序列化和反序列化。在以上的示例中,我们演示了如何使用BinaryFormatter类进行序列化和反序列化。除此之外,C#中还有其他格式可以使用,例如Json格式,使用Json序列化和反序列化需要使用Newtonsoft.Json类库。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c#对象反序列化与对象序列化示例详解 - Python技术站

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

相关文章

  • 解析.NET中几种Timer的使用

    解析.NET中几种Timer的使用 在.NET平台下,有多种Timer,包括System.Timers.Timer、System.Threading.Timer等。本文将对这些Timer进行详细讲解,让您可以选择最适合您需求的Timer进行使用。 System.Timers.Timer System.Timers.Timer是一个基于事件的Timer,可以在…

    C# 2023年6月1日
    00
  • Entity Framework使用Code First模式管理事务

    使用Entity Framework的Code First模式管理事务可以帮助开发人员更加便捷地创建数据库和管理事务,下面是使用Code First模式管理事务的详细攻略。 1. 定义实体类 首先,需要定义要映射到数据库的实体类。可以使用标准的C#类来定义实体类,但需要使用特定的约定来指定表名、主键等属性,如下面的示例所示: public class Cus…

    C# 2023年6月3日
    00
  • 手动编译C#代码的方法

    手动编译C#代码的方法,需要使用命令行工具,步骤如下: 安装.NET SDK首先需要安装.NET SDK,该工具包含了C#编译器和其他需要的组件,可以在https://dotnet.microsoft.com/download中下载。 编写C#代码创建一个.cs文件,并使用C#编写代码,例如下面这段简单的代码: using System; namespace…

    C# 2023年5月14日
    00
  • C# TreeNode案例详解

    下面是详细讲解“C# TreeNode案例详解”的完整攻略。 1. 概述 在使用 C# 编写 WinForm 窗体程序时,经常会使用 TreeView 控件来实现树形结构的展示。而 TreeView 控件中的节点则是通过 TreeNode 类来表示的。本文将详细介绍如何使用 C# 中的 TreeNode 类来实现一个简单的树形结构。 2. 创建根节点 要创建…

    C# 2023年6月7日
    00
  • C#实现彻底删除文件的方法

    C#实现彻底删除文件有多种方法,下面将为大家介绍两种实现的方法及示例。 方法一:使用File类的Delete方法 使用File类的Delete方法可以实现彻底删除文件,该方法可以接收文件路径作为参数,会删除目标文件而不会将其放入回收站。 下面是一个删除文件的示例代码: using System; using System.IO; namespace Dele…

    C# 2023年6月1日
    00
  • Unity3D实验室之iOS真机闪退的解决方法

    下面我来详细讲解“Unity3D实验室之iOS真机闪退的解决方法”的完整攻略。 Unity3D实验室之iOS真机闪退的解决方法 问题描述 在Unity3D开发iOS应用过程中,经常会遇到iOS真机上会出现闪退的情况。这种问题可能由于很多方面引起,需要仔细分析和排查。 本文将从几个方面来讲解如何解决iOS真机闪退问题。 解决方法 1. 清除缓存 有时候我们在测…

    C# 2023年6月3日
    00
  • C#如何在海量数据下的高效读取写入MySQL

    C#如何在海量数据下的高效读取写入MySQL攻略 1. 前置条件 已安装MySQL 已安装MySql.Data NuGet包 已创建数据库和数据表 2. 高效读取MySQL数据 要从MySQL数据库中读取大量数据,最好使用DataReader。它可以以只读方式快速读取大量数据,并且不会占用太多内存。下面是一个示例: try { using (MySqlCon…

    C# 2023年6月2日
    00
  • .net core中Grpc使用报错:The remote certificate is invalid according to the validation procedure.

    因为Grpc采用HTTP/2作为通信协议,默认采用LTS/SSL加密方式传输,比如使用.net core启动一个服务端(被调用方)时:   public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWe…

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