Как правильно сериализовать объект DateTime (например, с помощью BinaryWriter) и сохранить его полное состояние?Сериализовать DateTime как двоичный
У меня создалось впечатление, что время даты было представлено только внутренним длинным целым числом и что это целое число было доступно как свойство DateTime Ticks
. Однако, глядя на реализации, свойство Клещей фактически возвращает подмножество реальных внутренних данных, которая хранится в ULONG называется dateData
тики (который просто получает InternalTicks) реализуются следующим образом:
public long InternalTicks
{
get { return (long) this.dateData & 4611686018427387903L; }
}
Насколько я вижу, это означает, что датадаты могут содержать информацию, которая не обнаружена свойством Ticks
.
Незнакомец все же, BinaryFormatter Сериализация DateTime делает это в GetObjectData():
info.AddValue("ticks", this.InternalTicks);
info.AddValue("dateData", this.dateData);
Это будет выводить два тоскует в потоке, где один из них будет легко recovererd от другого!
Как я могу сериализовать свой DateTime без риска потерять какое-либо внутреннее состояние (желательно, конечно, всего за 8 байтов и без отражения). Я думаю, может быть, это может быть брошено (небезопасно), прямо на улунг?
Или я беспокоюсь без причины, будет ли свойство Ticks
закодировать все необходимое состояние?
Лично я использовал бы только 'DateTim e' для дат 'UTC' и' DateTimeOffset' для местных дат. Тогда вам не нужно беспокоиться о сохранении 'Kind', это просто всегда' UTC'. – CodesInChaos
Я не контролирую тип даты, сериализованный. –