Casting de un objeto a IEnumerable <T> donde T no se conoce

Estoy tratando de jugar con Reflexión y me encontré con la siguiente situación.

En el siguiente código, supongamos que el 'obj' puede ser de tiposIEnumerable<> oICollection<> oIList<>.

Me gustaría lanzar este System.Object toIEnumerable<> siempreICollection<> yIList<> heredar deIEnumerable<> de todos modos), por lo que me gustaría enumerar sobre la colección y usar la reflexión para escribir los elementos individuales.

La motivación detrás de esto es que solo estoy tratando de ver cómo los Serializadores, en general, serializarían los datos y, por lo tanto, estoy tratando de simular esa situación con la esperanza de entender la Reflexión también.

Pensé en lanzar el objeto aIEnumerable no genérico, pero pensó que esto causaría un boxeo innecesario de objetos, cuando digamos la instancia real deIEnumerable<int>... estoy pensando bien?

private void WriteGenericCollection(object obj)
    {
        Type innerType = obj.GetType().GetGenericArguments()[0];

        //Example: IEnumerable<int> or IEnumerable<Customer>
        Type generatedType = typeof(IEnumerable<>).MakeGenericType(innerType);

        //how could i enumerate over the individual items?
    }

Respuestas a la pregunta(2)

Su respuesta a la pregunta