C#自定义序列化ISerializable的实现方法

C# 中的自定义序列化可以通过实现ISerializable接口来实现。该接口要求实现GetObjectData(SerializationInfo info, StreamingContext context)和带有反序列化逻辑的构造函数。下面是具体实现方法的完整攻略:

1. 实现 ISerializable 接口

[Serializable]
public class MyClass : ISerializable
{
    public int MyField1;
    public string MyField2;

    public MyClass(int field1, string field2)
    {
        MyField1 = field1;
        MyField2 = field2;
    }

    // 序列化逻辑
    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("field1", MyField1);
        info.AddValue("field2", MyField2);
    }

    // 反序列化逻辑
    protected MyClass(SerializationInfo info, StreamingContext context)
    {
        MyField1 = info.GetInt32("field1");
        MyField2 = info.GetString("field2");
    }
}

2. 序列化

class Program
{
    static void Main(string[] args)
    {
        MyClass obj = new MyClass(42, "hello world");

        BinaryFormatter formatter = new BinaryFormatter();

        using (FileStream fs = new FileStream("obj.bin", FileMode.Create))
        {
            formatter.Serialize(fs, obj);
        }
    }
}

使用 BinaryFormatter 对象来序列化自定义对象MyClass。序列化结果将被写入到二进制文件obj.bin中。

3. 反序列化

class Program
{
    static void Main(string[] args)
    {
        MyClass obj;

        BinaryFormatter formatter = new BinaryFormatter();

        using (FileStream fs = new FileStream("obj.bin", FileMode.Open))
        {
            obj = (MyClass)formatter.Deserialize(fs);
        }

        Console.WriteLine("MyField1: {0}", obj.MyField1);
        Console.WriteLine("MyField2: {0}", obj.MyField2);
    }
}

使用 BinaryFormatter 对象来反序列化 MyObject。Deserialize 方法返回一个 object 对象,需要显示转换为 MyClass 类型。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#自定义序列化ISerializable的实现方法 - Python技术站

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

相关文章

  • .NET反向代理组件YARP介绍

    以下是“.NET反向代理组件YARP介绍”的完整攻略: 什么是YARP YARP(Yet Another Reverse Proxy)是一个开源的反向代理组件由微软开发。它是一个轻量级、高性能、可扩展的反向代理组件,可以用于构建高性能的服务网关、API网关等。 YARP的特性 YARP具有以下特性: 支持HTTP、HTTPS、WebSocket等协议 支持负…

    C# 2023年5月12日
    00
  • Asp.Net Core使用swagger生成api文档的完整步骤

    在ASP.NET Core中,可以使用Swagger来生成API文档。本攻略将深入探讨如何使用Swagger生成API文档,并提供两个示例说明。 使用Swagger生成API文档 使用Swagger生成API文档的步骤如下: 1. 添加Swashbuckle.AspNetCore包 我们需要添加Swashbuckle.AspNetCore包来使用Swagge…

    C# 2023年5月17日
    00
  • C#使用Mutex简单实现程序单实例运行的方法

    标题:C#使用Mutex简单实现程序单实例运行的方法 介绍 在C#开发过程中,有时需要确保程序只运行一次。为了实现这样的需求,可以使用Mutex,它是一个同步对象,可以用来确保只有一个线程访问共享资源。 步骤 创建Mutex对象 首先需要在程序的入口处创建一个全局的Mutex对象,命名为MutexObject。在C#中,可以使用System.Threadin…

    C# 2023年6月1日
    00
  • javascript function(函数类型)使用与注意事项小结

    下面我将详细讲解JavaScript函数类型的使用和注意事项小结。 函数类型概述 JavaScript中的函数是一种特殊的对象。它们可以像普通变量一样被传递、赋值、作为参数或返回值。 函数有两种基础类型: 函数声明 函数表达式 函数声明是指使用function关键字声明的函数,声明的语法如下: function functionName(arg1, arg2…

    C# 2023年6月8日
    00
  • MASA MinimalAPI源码解析:为什么我们只写了一个app.MapGet,却生成了三个接口

    源码解析:为什么我们只写了一个app.MapGet,却生成了三个接口 1.ServiceBase 1.AutoMapRoute 源码如下: AutoMapRoute自动创建map路由,MinimalAPI会根据service中的方法,创建对应的api接口。 比如上文的一个方法: public async Task<WeatherForecast[]&g…

    C# 2023年5月5日
    00
  • C#12预览版释出,新功能一览

    概述 C#是微软开发的一种流行的编程语言,广泛用于开发桌面,Web和移动应用程序。在每个新版本中,C# 都会带来令人兴奋的功能和改进,使其更强大、更具表现力和更高效。C# 的最新版本是2022年发布的 C#11,它引入了一系列新功能,例如abstract 和 virtual 引入到静态方法中、泛型 attribute等。现在,微软已经在开发下一个版本的C#,…

    C# 2023年4月19日
    00
  • C# TryGetValue(TKey,TValue):获取具有指定键的值

    C#中的TryGetValue(TKey,TValue)是一个可以用于Dictionary类的方法。该方法的作用是获取指定键所对应的值,如果不存在则返回默认值。下面是该方法的完整攻略。 方法语法 Dictionary类型的TryGetValue()方法有如下两个重载形式: public bool TryGetValue(TKey key, out TValu…

    C# 2023年4月19日
    00
  • asp.net 一个封装比较完整的FTP类

    使用ASP.NET开发Web应用时,如果需要进行FTP文件上传、下载或其他操作,可以使用FTP类进行操作。本文将介绍如何使用ASP.NET中一个封装比较完整的FTP类进行FTP文件上传和下载。以下是操作步骤: 步骤1:引用FTP类 在ASP.NET项目中引用FTP类,可以通过NuGet包管理器安装FTP类库,如下所示: Install-Package Flu…

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