Serialize o DateTime como binário

Como serializar adequadamente um objeto DateTime (por exemplo, usando um BinaryWriter) e preservar seu estado completo?

Fiquei com a impressão de que uma data era representada apenas por um inteiro longo interno e que esse inteiro era acessível comoTicks propriedade do DateTime. No entanto, olhando para a implementação, a propriedade Ticks na verdade retorna um subconjunto dos dados internos reais que são armazenados em um ulong chamadodateData

Ticks (que só recebe InternalTicks) é implementado da seguinte forma:

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

Tanto quanto eu posso ver isso significa que o dateData pode conter informações que não são reveladas peloTicks propriedade.

Ainda mais estranho, a serialização BinaryFormatter de um DateTime faz isso em GetObjectData ():

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

Isso vai sairdois longs no fluxo, onde um deles seria facilmente recuperado do outro!

Como posso serializar meu DateTime sem o risco de perder qualquer estado interno (de preferência, é claro, em apenas 8 bytes e sem reflexão). Eu estou pensando que talvez possa ser lançado (inseguro), diretamente para um ulong?

Ou estou me preocupando sem motivo, será que oTicks propriedade realmente codifica todo o estado necessário?

questionAnswers(2)

yourAnswerToTheQuestion