4

这些字段是否设置为默认值,例如创建新实例时?我可以创建自定义代码以在反序列化时将这些字段设置为新值吗?

4

2 回答 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 回答