Serializar DateTime como binario

¿Cómo serializo correctamente un objeto DateTime (por ejemplo, usando un BinaryWriter) y conservo su estado completo?

Tenía la impresión de que la fecha y la hora solo estaban representadas por un entero largo interno, y que este entero era accesible como elTicks propiedad de la fecha y hora. Sin embargo, al observar la implementación, la propiedad Ticks en realidad devuelve un subconjunto de los datos internos reales que se almacenan en un ulong llamadodateData

Las garrapatas (que solo obtienen InternalTicks) se implementan así:

public long InternalTicks
{
    get { return (long) this.dateData & 4611686018427387903L; }
}

Por lo que puedo ver, esto significa que los datos de fecha pueden contener información que no es revelada por elTicks propiedad.

Aún más extraño, la serialización BinaryFormatter de DateTime hace esto en GetObjectData ():

info.AddValue("ticks", this.InternalTicks);
info.AddValue("dateData", this.dateData);

Que saldrádos largos en la corriente, donde uno de ellos se recuperaría fácilmente del otro!

¿Cómo puedo serializar mi DateTime sin riesgo de perder ninguno de los estados internos (preferiblemente, por supuesto, en solo 8 bytes, y sin reflexión)? Estoy pensando que tal vez puede ser lanzado (inseguro), directamente a un ulong?

¿O me estoy preocupando sin ninguna razón?Ticks ¿La propiedad realmente codifica todo el estado necesario?

Respuestas a la pregunta(2)

Su respuesta a la pregunta