这些字段是否设置为默认值,例如创建新实例时?我可以创建自定义代码以在反序列化时将这些字段设置为新值吗?
问问题
1533 次
2 回答
7
注意:所有这些都特定于BinaryFormatter
:
默认情况下,它们被完全忽略;它们将具有其类型默认值,即零值/空值。
如果你实现了自定义序列ISerializable
化(但是,您也可以实现,它提供了初始化此类字段的理想机会:[NonSerializable]
IDeserializationCallback
[Serializable]
class Foo : IDeserializationCallback
{
// ... not shown
void IDeserializationCallback.OnDeserialization(object sender)
{
// init your [NonSerialized] fields here
}
}
请注意,其他序列化程序对序列化回调有不同的实现,其中一些也受 支持BinaryFormatter
,例如:
[Serializable]
class Foo
{
// ... not shown
[OnDeserializing]
private void AnyMethodName(StreamingContext c)
{
// init your [NonSerialized] fields here
}
}
基于属性的回调提供了更多在特定点注入代码的机会,通常是首选。有 4 个:[OnDeserializing]
、[OnDeserialized]
和。[OnSerializing]
[OnSerialized]
于 2012-09-17T09:45:11.377 回答
0
创建新实例时,此字段是类型的默认值。
您可以在对象构造上设置自定义值
于 2012-09-17T09:38:09.380 回答