首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用派生类在C#中进行序列化

在C#中,序列化是将对象的状态(包括其数据和成员变量的值)转换为可以存储或传输的格式的过程。派生类是从基类派生出的类,因此在序列化派生类时,需要注意以下几点:

  1. 基类必须标记为可序列化。
  2. 派生类必须标记为可序列化。
  3. 派生类必须包含基类的序列化构造函数。
  4. 派生类必须实现ISerializable接口。

以下是一个简单的示例,演示如何在C#中序列化派生类:

代码语言:csharp
复制
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable]
public class BaseClass
{
    public int BaseValue { get; set; }

    public BaseClass()
    {
        BaseValue = 1;
    }

    protected BaseClass(SerializationInfo info, StreamingContext context)
    {
        BaseValue = info.GetInt32("BaseValue");
    }

    public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("BaseValue", BaseValue);
    }
}

[Serializable]
public class DerivedClass : BaseClass, ISerializable
{
    public int DerivedValue { get; set; }

    public DerivedClass()
    {
        DerivedValue = 2;
    }

    protected DerivedClass(SerializationInfo info, StreamingContext context) : base(info, context)
    {
        DerivedValue = info.GetInt32("DerivedValue");
    }

    public override void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        base.GetObjectData(info, context);
        info.AddValue("DerivedValue", DerivedValue);
    }

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        GetObjectData(info, context);
    }
}

class Program
{
    static void Main(string[] args)
    {
        DerivedClass obj = new DerivedClass();

        IFormatter formatter = new BinaryFormatter();
        Stream stream = new FileStream("serialized.bin", FileMode.Create, FileAccess.Write, FileShare.None);
        formatter.Serialize(stream, obj);
        stream.Close();

        stream = new FileStream("serialized.bin", FileMode.Open, FileAccess.Read, FileShare.None);
        obj = (DerivedClass)formatter.Deserialize(stream);
        stream.Close();
    }
}

在这个示例中,我们定义了一个基类BaseClass和一个派生类DerivedClass。派生类继承了基类,并实现了ISerializable接口。在序列化和反序列化时,我们使用了BinaryFormatter类。

在序列化时,我们首先创建了一个DerivedClass对象,并使用BinaryFormatter类将其序列化到文件中。在反序列化时,我们从文件中读取序列化的数据,并使用BinaryFormatter类将其反序列化为DerivedClass对象。

这个示例演示了如何在C#中序列化派生类。需要注意的是,基类和派生类必须都标记为可序列化,并且派生类必须包含基类的序列化构造函数和实现ISerializable接口。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券