Pau*_*ews 4 c# deserialization
这些字段是否设置为默认值,例如创建新实例时?我可以创建自定义代码以在反序列化时将这些字段设置为新值吗?
注意:所有这些都特定于BinaryFormatter:
默认情况下,它们会被完全忽略; 它们将具有类型默认值,即零值/空值.
如果您实现自定义序列化(ISerializable),[NonSerializable]则不适用,并且您可以执行您想要的操作,但大多数人不希望这样做.但是,您也可以实现IDeserializationCallback,这提供了初始化此类字段的理想机会:
[Serializable]
class Foo : IDeserializationCallback
{
// ... not shown
void IDeserializationCallback.OnDeserialization(object sender)
{
// init your [NonSerialized] fields here
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,其他序列化程序具有不同的序列化回调实现,其中一些也受到支持BinaryFormatter,例如:
[Serializable]
class Foo
{
// ... not shown
[OnDeserializing]
private void AnyMethodName(StreamingContext c)
{
// init your [NonSerialized] fields here
}
}
Run Code Online (Sandbox Code Playgroud)
基于属性的回调提供了在特定点注入代码的更多机会,并且通常是首选.有4种:[OnDeserializing],[OnDeserialized],[OnSerializing]和[OnSerialized].
| 归档时间: |
|
| 查看次数: |
1392 次 |
| 最近记录: |