C# 如何在反序列化对象时对对象做初始化
时间: 2024-02-09 12:11:48 浏览: 23
在 C# 中,在反序列化对象时可以通过实现特殊的构造函数和方法来对对象进行初始化。具体来说,可以使用以下两种方法:
1.实现 ISerializable 接口
ISerializable 接口是 C# 中用于序列化和反序列化对象的接口之一。通过实现该接口,可以控制对象的序列化和反序列化过程,并在反序列化时对对象进行初始化。
在实现 ISerializable 接口时,需要实现 GetObjectData 方法和特殊的构造函数。在 GetObjectData 方法中,将对象的字段序列化到 SerializationInfo 对象中。在反序列化时,使用特殊的构造函数从 SerializationInfo 对象中读取对象的字段并进行初始化。
例如:
```
[Serializable]
public class MyClass : ISerializable
{
public int myInt;
public string myString;
public MyClass() {}
protected MyClass(SerializationInfo info, StreamingContext context)
{
myInt = info.GetInt32("myInt");
myString = info.GetString("myString");
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("myInt", myInt);
info.AddValue("myString", myString);
}
}
```
2.实现 OnDeserializedAttribute 特性
OnDeserializedAttribute 特性是 C# 中另一个用于反序列化对象时对对象进行初始化的方法。通过在对象的方法上添加该特性,可以在反序列化时调用该方法对对象进行初始化。
例如:
```
[Serializable]
public class MyClass
{
public int myInt;
public string myString;
[OnDeserialized]
private void OnDeserialized(StreamingContext context)
{
myInt = 0;
myString = "default";
}
}
```
在上面的代码中,当反序列化 MyClass 对象时,会调用 OnDeserialized 方法对对象进行初始化。