Làm cách nào để tuần tự hóa đúng đối tượng DateTime (ví dụ: sử dụng BinaryWriter) và giữ nguyên trạng thái đầy đủ của nó?Serialize DateTime dưới dạng nhị phân
Tôi đã có ấn tượng rằng thời gian ngày chỉ được biểu diễn bằng số nguyên dài bên trong và số nguyên này có thể truy cập được như thuộc tính Ticks
của DateTime. Tuy nhiên, nhìn vào thực hiện, tài sản Bọ ve thực sự trả về một tập hợp con của dữ liệu nội bộ thực được lưu trữ trong một ulong gọi dateData
Bọ ve (mà chỉ được InternalTicks) được thực hiện như sau:
public long InternalTicks
{
get { return (long) this.dateData & 4611686018427387903L; }
}
Theo tôi có thể thấy điều này có nghĩa là dateData có thể chứa thông tin không được tiết lộ bởi thuộc tính Ticks
.
Stranger Chưa hết, BinaryFormatter serialization của một DateTime thực hiện điều này trong GetObjectData():
info.AddValue("ticks", this.InternalTicks);
info.AddValue("dateData", this.dateData);
Đó sẽ ra hai chờ đợi trong dòng, nơi một trong số họ sẽ được dễ dàng recovererd từ khác!
Làm cách nào để có thể tuần tự hóa DateTime của mình mà không có nguy cơ mất bất kỳ trạng thái nội bộ nào (tốt nhất là chỉ trong 8 byte và không có phản ánh). Tôi nghĩ có lẽ nó có thể được đúc (không an toàn), trực tiếp đến một ulong?
Hoặc tôi lo lắng không có lý do gì, thuộc tính Ticks
có thực sự mã hóa tất cả trạng thái cần thiết không?
Cá nhân tôi chỉ sử dụng 'DateTim e' cho 'UTC' ngày và' DateTimeOffset' cho ngày địa phương. Sau đó, bạn không cần phải lo lắng về việc lưu trữ 'Loại', nó chỉ đơn giản là luôn luôn' UTC'. – CodesInChaos
Tôi không kiểm soát Loại ngày được đăng theo thứ tự. –