117.info
人生若只如初见

C#序列化与反序列化怎么实现

在 C# 中,可以使用序列化和反序列化来将对象转换为字节流或字符串,以便在不同的应用程序之间进行传输或存储。

要实现序列化和反序列化,需要使用 System.Runtime.Serialization 命名空间中的相关类和接口。以下是一个简单的示例,展示了如何在 C# 中实现序列化和反序列化:

  1. 定义一个可序列化的类,该类必须标记为 [Serializable] 属性,以指示它可以被序列化。
[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
  1. 使用 System.Runtime.Serialization.Formatters.Binary 命名空间中的 BinaryFormatter 类进行序列化和反序列化。
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

public class Program
{
    public static void Main(string[] args)
    {
        // 创建一个 Person 对象
        Person person = new Person
        {
            Name = "John",
            Age = 30
        };

        // 序列化对象
        byte[] serializedData = https://www.yisu.com/ask/SerializeObject(person);>(serializedData);

        // 输出反序列化后的对象的属性值
        Console.WriteLine($"Name: {deserializedPerson.Name}");
        Console.WriteLine($"Age: {deserializedPerson.Age}");
    }

    // 序列化对象
    public static byte[] SerializeObject(T obj)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        using (MemoryStream memoryStream = new MemoryStream())
        {
            formatter.Serialize(memoryStream, obj);
            return memoryStream.ToArray();
        }
    }

    // 反序列化对象
    public static T DeserializeObject(byte[] data)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        using (MemoryStream memoryStream = new MemoryStream(data))
        {
            return (T)formatter.Deserialize(memoryStream);
        }
    }
}

在上述示例中,首先定义了一个可序列化的 Person 类。然后,在 Main 方法中创建了一个 Person 对象,并将其序列化为字节数组。接下来,使用 DeserializeObject 方法将字节数组反序列化为 Person 对象,并输出其属性值。

请注意,上述示例使用了 BinaryFormatter 类进行序列化和反序列化。还可以使用其他序列化方式,如 XML 序列化(XmlSerializer)或 JSON 序列化(Json.NET)来实现序列化和反序列化。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe240AzsLAQBXBFM.html

推荐文章

  • C/C++文件API简单操作

    C/C++文件API是一组可以用于操作文件的函数,包括创建、打开、读写、关闭等操作。下面是一些常见的C/C++文件API的简单操作示例: 创建文件: #include int main(...

  • c#如何定义数组

    在C#中,可以通过以下方式来定义数组: 使用数组初始化器(Array Initializer): int[] numbers = { 1, 2, 3, 4, 5 }; 通过new关键字和数组类型来创建一个数组:...

  • c++中using的含义是什么

    在C++中,using关键字有两种不同的用法和含义。 using用于声明别名: 当我们想要给一个已经存在的类型或命名空间取一个新的别名时,可以使用using关键字。例如:<...

  • c++中using的用法是什么

    在C++中,using关键字有两种用法: 用于命名空间别名:using namespace ;
    这种用法将命名空间的名称引入到当前的作用域中,以便直接使用命名空间中的成员,...

  • linux怎么安装wps需要的依赖包

    要在Linux上安装WPS Office,您需要安装以下依赖包: Freetype字体库:sudo apt-get install freetype* Fontconfig字体配置库:sudo apt-get install fontconfig...

  • mysql groupby语句的用法是什么

    MySQL的GROUP BY语句用于根据指定的列对查询结果进行分组。它通常与聚合函数(如SUM、COUNT、AVG等)一起使用,用于对每个组的数据进行计算或汇总。
    GROUP ...

  • c++中max函数的用途有哪些

    在C++中,max函数有以下几个用途: 比较两个值的大小,返回较大的值。例如:max(3, 5) 返回 5。 比较两个对象的大小,返回较大的对象。这需要使用自定义的比较函...

  • ubuntu terminal打不开的原因有哪些

    有几个常见的原因可能导致Ubuntu终端无法打开: 终端程序损坏:终端程序可能损坏或受到其他软件的干扰,导致无法正常打开。可以尝试重新安装终端程序来解决该问题...