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?

questionAnswers(2)

yourAnswerToTheQuestion