如何正确序列化 DateTime 对象(例如使用 BinaryWriter),并保留其完整状态?
我的印象是日期时间仅由内部长整数表示,并且该整数可作为Ticks
DateTime 的属性访问。但是,查看实现,Ticks 属性实际上返回了实际内部数据的子集,该子集存储在名为 ulong 的dateData
Ticks(它只是获取 InternalTicks)是这样实现的:
public long InternalTicks
{
get { return (long) this.dateData & 4611686018427387903L; }
}
据我所知,这意味着 dateData 可能包含该Ticks
属性未显示的信息。
更奇怪的是,DateTime 的 BinaryFormatter 序列化在 GetObjectData() 中执行此操作:
info.AddValue("ticks", this.InternalTicks);
info.AddValue("dateData", this.dateData);
这将在流中输出两个long,其中一个很容易从另一个中恢复!
我怎样才能序列化我的 DateTime 而不会丢失任何内部状态(当然最好只有 8 个字节,并且没有反射)。我在想也许它可以直接投射到 ulong 上(不安全)?
还是我无缘无故地担心,该Ticks
属性实际上会编码所有必要的状态吗?