Serialize DateTime jako binarny
Jak poprawnie serializować obiekt DateTime (np. Używając BinaryWriter) i zachować jego pełny stan?
Miałem wrażenie, że czas daty był reprezentowany tylko przez wewnętrzną liczbę całkowitą i że ta liczba całkowita była dostępna jakoTicks
właściwość DateTime. Jednak patrząc na implementację, właściwość Ticks faktycznie zwraca podzbiór rzeczywistych danych wewnętrznych, które są przechowywane w wywołanym ulongudateData
Kleszcze (które właśnie pobierają InternalTicks) są zaimplementowane tak:
public long InternalTicks
{
get { return (long) this.dateData & 4611686018427387903L; }
}
O ile widzę, oznacza to, że dataData może zawierać informacje, które nie są ujawniane przezTicks
własność.
Jeszcze dziwniejsze, że Serializacja BinaryFormatter DateTime robi to w GetObjectData ():
info.AddValue("ticks", this.InternalTicks);
info.AddValue("dateData", this.dateData);
To wyjdziedwa tęskni w strumieniu, gdzie jeden z nich będzie łatwo odzyskać od drugiego!
Jak mogę serializować mój DateTime bez ryzyka utraty jakiegokolwiek stanu wewnętrznego (najlepiej oczywiście w zaledwie 8 bajtach i bez odbicia). Myślę, że może być rzucony (niebezpieczny) bezpośrednio na ulong?
Albo martwię się bez powodu, czyTicks
właściwość faktycznie koduje cały niezbędny stan?