Uso de la reflexión para determinar cómo se diseña un tipo .Net en la memoria

Estoy experimentando con la optimización de combinadores de analizador en C #. Una posible optimización, cuando el formato serializado coincide con el formato en memoria, es simplemente hacer una memoria (insegura) de los datos que se analizarán en una instancia o incluso en muchas instancias del tipo.

Quiero escribir un código que determine si el formato en memoria coincide con el formato serializado, para determinar dinámicamente si se puede aplicar la optimización. (Obviamente, esta es una optimización insegura y podría no funcionar por un montón de razones sutiles. Solo estoy experimentando, no planeo usar esto en el código de producción).

Yo uso el atributo[StructLayout (LayoutKind.Sequential, Pack = 1)] para no forzar el relleno y forzar el orden en memoria para que coincida con el orden de declaración. Reviso ese atributo con reflexión, pero en realidad todo lo que confirma es "sin relleno". También necesito el orden de los campos. (Prefiero fuertemente no tener que especificar manualmenteFieldOffset atributos para cada campo, ya que eso sería muy propenso a errores.)

Asumí que podía usar el orden de los campos devueltos porGetFields, pero la documentación indica explícitamente que el pedido no está especificado.

Dado que estoy forzando el orden de los campos con el atributo StructLayout, ¿hay alguna manera de reflexionar sobre ese orden?

editar Estoy bien con la restricción de que todos los campos deben estarblittable.

Respuestas a la pregunta(2)

Su respuesta a la pregunta