Сериализация 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
свойство фактически кодировать все необходимое состояние?