(BinaryWriterを使用して)DateTimeオブジェクトを適切にシリアル化し、完全な状態を保持するにはどうすればよいですか?バイナリとしてDateTimeをシリアライズ
私は、日付時間が内部の長い整数で表され、この整数がDateTimeのTicks
プロパティとしてアクセス可能であったという印象を受けました。
public long InternalTicks
{
get { return (long) this.dateData & 4611686018427387903L; }
}
:ただし、実装を見て、マダニプロパティが実際ULONGに格納されている実際の内部データのサブセットがdateData
ティック(ちょうどInternalTicksを取得する)ように同様に実装されていると呼ばれる戻り私が見る限り、これは、dateDataにはTicks
プロパティによって明らかにされない情報が含まれている可能性があることを意味します。
ストレンジャーまだ、日時のにBinaryFormatter直列化は、GetObjectData()でこれを行います。出力は以下となりますストリームで long型は、そのうちの一つは、簡単に他からrecovererdされるだろう
info.AddValue("ticks", this.InternalTicks);
info.AddValue("dateData", this.dateData);
!
どのように内部状態を失うことなく(もちろん、ちょうど8バイトで、反射なしで)DateTimeをシリアル化できますか?私はおそらくそれがulongに直接(安全ではない)キャストできると思っていますか?
また、理由がないと心配していますが、Ticks
プロパティは実際に必要な状態をすべてエンコードしますか?
個人的に私は 'DateTimローカル日付の場合は 'DateTimeOffset'となります。 'Kind'を保存することを心配する必要はありません。それは単に' UTC'です。 – CodesInChaos
シリアル化された日付時刻の種類は制御しません。 –