IDeserializationCallback vs OnDeserializedAttribute

前端 未结 4 2322
小蘑菇
小蘑菇 2021-02-19 10:45

As far as I understand, the IDeserializationCallback interface and the OnDeserialized event can both be used when an object needs to perform some task after being deserialized.<

相关标签:
4条回答
  • 2021-02-19 11:10

    I have wondered the same thing. As far as pros/cons go, I can only reason that the interface has an advantage in that it forces you to implement the correct method signature where-as the attribute version will happily let you compile your class regardless of what your method signature looks like.

    0 讨论(0)
  • 2021-02-19 11:13

    Further discussion on this blog post

    0 讨论(0)
  • 2021-02-19 11:16

    Those two serve different purposes and cannot be used interchangeably. In most of the cases you probably will be better served by the interface.

    Look here for some explanation: http://social.msdn.microsoft.com/Forums/en-US/netfxremoting/thread/311b2b57-6b0a-49ed-aa96-84f69d51da0f

    0 讨论(0)
  • 2021-02-19 11:23

    Darren Headrick's post from above link (for completeness) :

    DeserializationCallback.OnDeserialization "Runs when the entire object graph has been deserialized." (link).

    The OnDeserialized event however "Use the OnDeserializedAttribute when you need to fix values on a deserialized object after it has been deserialized and before the graph is returned. This attribute can be used instead of the IDeserializationCallback interface." (link).

    Since the OnDeserialized attribute can be used to modify the object graph, it gets called before OnDeserialization (which signifies the Object graph is in its final state).

    0 讨论(0)
提交回复
热议问题