
1. 官方定义(你可直接写文档)
ISerializable 是 .NET 提供的自定义序列化接口 ,允许类型完全控制自身对象的序列化与反序列化过程。实现该接口的对象可以决定:
- 哪些字段要序列化
- 哪些字段不序列化
- 序列化时存什么数据
- 反序列化时怎么还原对象
2. 核心作用(大白话)
- 不让系统自动瞎序列化
- 自己决定存什么、读什么
- 兼容版本升级
- 保护敏感字段
- 自定义对象还原逻辑
3. 必须实现的两个东西
- GetObjectData(...) → 序列化时调用:把对象写进去
- 构造函数 (SerializationInfo, StreamingContext) → 反序列化时调用:把对象读回来
4. 最简单标准模板(你可直接用)
csharp
运行
using System;
using System.Runtime.Serialization;
[Serializable] // 必须加
public class MyClass : ISerializable
{
public int Id { get; set; }
public string Name { get; set; }
// 空构造(可选)
public MyClass() { }
// ============================
// 【1】反序列化构造函数
// ============================
protected MyClass(SerializationInfo info, StreamingContext context)
{
Id = info.GetInt32(nameof(Id));
Name = info.GetString(nameof(Name));
}
// ============================
// 【2】序列化方法(ISerializable)
// ============================
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue(nameof(Id), Id);
info.AddValue(nameof(Name), Name);
}
}
5. 为什么要用 ISerializable?(重点)
✅ 自定义控制(最关键)
系统默认序列化会把所有 public/private 字段都序列化你可以:
- 只序列化部分字段
- 不序列化临时变量
- 不序列化大对象
- 加密敏感数据
✅ 版本兼容
类升级后(加字段、删字段),反序列化不会崩
✅ 安全控制
密码、密钥等不序列化
✅ 复杂对象还原
对象构造复杂 → 自己控制怎么还原
6. 你可以直接写进文档的正式描述
ISerializable 接口说明
ISerializable 是 .NET 平台提供的自定义序列化接口 ,用于实现对象的可控式二进制序列化与反序列化 。通过实现该接口,类型能够自主定义序列化数据的存储结构与还原逻辑,而非依赖框架自动序列化,从而实现数据筛选、版本兼容、安全控制、复杂对象还原等高级能力。
7. 超简短总结(写代码注释用)
plaintext
ISerializable:允许对象完全控制自身的序列化与反序列化过程。