ISurrogated
interface - it allows you to specify a surrogate object, that should be serializable, but it's free to define its own internal structure. Upon deserialization, that surrogate object will be called to materialize into an actual object, you wanted to have back.