Сериализация DateTime в двоичном виде

Как правильно сериализовать объект DateTime (например, используя BinaryWriter) и сохранить его полное состояние?

У меня сложилось впечатление, что время даты было представлено только внутренним длинным целым числом, и что это целое число было доступно какTicks свойство DateTime. Однако, глядя на реализацию, свойство Ticks фактически возвращает подмножество реальных внутренних данных, которые хранятся в ulong, называемомdateData

Ticks (который просто получает InternalTicks) реализован так:

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

Насколько я понимаю, это означает, что dateData может содержать информацию, которая не раскрываетсяTicks свойство.

Еще более странно, что сериализация BinaryFormatter для DateTime делает это в GetObjectData ():

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

Что будет выводитьдва Лонг в потоке, где один из них будет легко восстановлен от другого!

Как я могу сериализовать свой DateTime без риска потери какого-либо внутреннего состояния (желательно, конечно, всего за 8 байтов, и без отражения). Я думаю, может быть, это может быть брошено (небезопасно), прямо в ulong?

Или я волнуюсь без причины, будет лиTicks свойство фактически кодировать все необходимое состояние?

Ответы на вопрос(2)

Ваш ответ на вопрос