Hay varias maneras.
Dado que los comentarios parecen indicar que le sugiero que haga esto, permítame dejarlo en claro: Debe crear un tipo con nombre para su objeto, ya que tiene la intención de pasarlo.
Primero, puede usar Reflection, que ya ha señalado otra respuesta aquí.
Otra forma, que engaña .NET en darle el tipo correcto se conoce como "emitir con el ejemplo", y es algo como esto: debe pasar su objeto a través de una llamada al método genérico, que devolverá el objeto como el tipo correcto, al inferir el tipo correcto para regresar.
Por ejemplo, intente esto:
private static T CastByExample<T>(T example, object value)
{
return (T)value;
}
y utilizarlo:
var x = CastByExample(new { TheDay = ??, EntranceOrExit = ?? }, obj);
para los dos ?? puntos, solo necesita pasar algo que se ajuste al tipo de datos para esas propiedades, los valores no se usarán.
Esto explota el hecho de que múltiples tipos anónimos que contienen exactamente las mismas propiedades, del mismo tipo, en el mismo orden, en el mismo conjunto, se asignarán al mismo tipo individual.
Sin embargo, en este momento debería crear un tipo con nombre en su lugar.
La gran pregunta es ¿por qué quieres? ¿Qué estás intentando lograr? – pdr