在C#中,序列化是将对象的状态(包括其数据和成员变量的值)转换为可以存储或传输的格式的过程。派生类是从基类派生出的类,因此在序列化派生类时,需要注意以下几点:
以下是一个简单的示例,演示如何在C#中序列化派生类:
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
接口。
领取专属 10元无门槛券
手把手带您无忧上云