【发布时间】:2016-07-31 11:55:22
【问题描述】:
我想知道将DateTimeOffset 序列化为二进制流(使用BinaryWriter)并再次反序列化(使用BinaryReader)的最佳方法是什么。
要序列化DateTime,我有:
public void WriteValue(DateTime value)
{
_writer.Write(value.ToBinary());
}
和
public DateTime ReadDateTime()
{
return DateTime.FromBinary(_reader.ReadInt64());
}
就性能和存储大小而言,序列化/反序列化 DateTimeOffset 的最佳方法是什么?
【问题讨论】:
-
A DateTime 是一个双精度数,整数是从 1900 年 1 月 1 日(第 1 天)开始的天数,小数是一天的小数。 double 存储为 32 位浮点数。所以使用 Int64 会产生舍入误差。
-
BinaryFormatter 很容易做到这一点。看起来您正在滚动自己的序列化程序?
-
@Plutonix:是的,我愿意。
-
您可以序列化它的 UtcTicks 和 Offset.Ticks 属性,使用 DateTimeOffset(long, Timespan) 构造函数反序列化。如果空间很重要,那么您可以以分钟为单位序列化 Offset 属性,简短就足够了。
-
如果你不能通过使用秒表来解决这个问题,那么你做错了。对此进行微优化通常是没有意义的,文件 I/O 比这样的代码要昂贵得多。
标签: c# .net base-class-library