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技术站