C# 面试题 目录

C# 中如何自定义序列化过程?

推荐答案

在C#中,可以通过实现 ISerializable 接口来自定义序列化过程。以下是一个示例代码:

-- -------------------- ---- -------
----- -------
----- -----------------------------

--------------
------ ----- ------------------- - -------------
-
    ------ ------ ---- - ---- ---- -
    ------ --- --- - ---- ---- -

    -- ------
    ------ --------------------- - -

    -- --------
    --------- ------------------------------------- ----- ---------------- --------
    -
        ---- - -----------------------
        --- - ---------------------
    -

    -- -- ------------- --- ------------- --
    ------ ---- ------------------------------- ----- ---------------- --------
    -
        --------------------- ------
        -------------------- -----
    -
-

本题详细解读

1. ISerializable 接口

ISerializable 接口允许你完全控制对象的序列化和反序列化过程。通过实现这个接口,你可以自定义哪些数据被序列化以及如何序列化。

2. GetObjectData 方法

GetObjectData 方法是 ISerializable 接口的核心方法之一。它用于在序列化过程中将对象的数据添加到 SerializationInfo 对象中。你可以在这个方法中决定哪些字段或属性需要被序列化。

3. 反序列化构造函数

反序列化构造函数是一个特殊的构造函数,用于在反序列化过程中重建对象。它接受 SerializationInfoStreamingContext 两个参数。SerializationInfo 包含了序列化时存储的数据,你可以从中提取数据并赋值给对象的字段或属性。

4. Serializable 特性

[Serializable] 特性用于标记一个类可以被序列化。如果一个类没有这个特性,尝试序列化时会抛出 SerializationException 异常。

5. 使用示例

以下是如何使用自定义序列化类的示例:

-- -------------------- ---- -------
----- -------
----- ----------
----- -----------------------------------------------

----- -------
-
    ------ ---- ------
    -
        ------------------- --- - --- ------------------- - ---- - ------- --- - -- --

        -- ---
        --------------- --------- - --- ------------------
        ----- ----------- ------ - --- ---------------------- -----------------
        -
            --------------------------- -----
        -

        -- ----
        ----- ----------- ------ - --- ---------------------- ---------------
        -
            ------------------- ------ - ---------------------------------------------------
            ------------------------- -------------- ---- ---------------
        -
    -
-

在这个示例中,CustomSerialization 类的对象被序列化到文件中,然后再从文件中反序列化回来。

纠错
反馈