using System; namespace FullSerializer { /// /// /// Enables injecting code before/after an object has been serialized. This /// is most useful if you want to run the default serialization process but /// apply a pre/post processing step. /// /// /// Multiple object processors can be active at the same time. When running /// they are called in a "nested" fashion - if we have processor1 and /// process2 added to the serializer in that order (p1 then p2), then the /// execution order will be p1#Before p2#Before /serialization/ p2#After /// p1#After. /// /// public abstract class fsObjectProcessor { /// /// Is the processor interested in objects of the given type? /// /// The given type. /// /// True if the processor should be applied, false otherwise. /// public virtual bool CanProcess(Type type) { throw new NotImplementedException(); } /// /// Called before serialization. /// /// /// The field/property type that is storing the instance. /// /// The type of the instance. public virtual void OnBeforeSerialize(Type storageType, object instance) { } /// /// Called after serialization. /// /// /// The field/property type that is storing the instance. /// /// The type of the instance. /// The data that was serialized. public virtual void OnAfterSerialize(Type storageType, object instance, ref fsData data) { } /// /// Called before deserialization. /// /// /// The field/property type that is storing the instance. /// /// /// The data that will be used for deserialization. /// public virtual void OnBeforeDeserialize(Type storageType, ref fsData data) { } /// /// Called before deserialization has begun but *after* the object /// instance has been created. This will get invoked even if the user /// passed in an existing instance. /// /// /// **IMPORTANT**: The actual instance that gets passed here is *not* /// guaranteed to be an a subtype of storageType, since the value for /// instance is whatever the active converter returned for /// CreateInstance() - ie, some converters will return dummy types in /// CreateInstance() if instance creation cannot be separated from /// deserialization (ie, KeyValuePair). /// /// /// The field/property type that is storing the instance. /// /// /// The created object instance. No deserialization has been applied to /// it. /// /// /// The data that will be used for deserialization. /// public virtual void OnBeforeDeserializeAfterInstanceCreation(Type storageType, object instance, ref fsData data) { } /// /// Called after deserialization. /// /// /// The field/property type that is storing the instance. /// /// The type of the instance. public virtual void OnAfterDeserialize(Type storageType, object instance) { } } }