public override void Marshall(MarshallingContext context, object obj) { context.CreateIndirectionWithinSlot(); if (IsNotHandlingConcreteType(context)) { _typeHandler.Write(context, obj); return; } if (_typeHandler is IInstantiatingTypeHandler) { IInstantiatingTypeHandler instantiating = (IInstantiatingTypeHandler)_typeHandler; instantiating.WriteInstantiation(context, obj); instantiating.Write(context, obj); } else { _typeHandler.Write(context, obj); } }