【发布时间】:2014-09-03 18:20:00
【问题描述】:
我有一个表示 DateTime 的结构,它也有如下区域信息:
public struct DateTimeWithZone
{
private readonly DateTime _utcDateTime;
private readonly TimeZoneInfo _timeZone;
public DateTimeWithZone(DateTime dateTime, TimeZoneInfo timeZone,
DateTimeKind kind = DateTimeKind.Utc)
{
dateTime = DateTime.SpecifyKind(dateTime, kind);
_utcDateTime = dateTime.Kind != DateTimeKind.Utc
? TimeZoneInfo.ConvertTimeToUtc(dateTime, timeZone)
: dateTime;
_timeZone = timeZone;
}
public DateTime UniversalTime { get { return _utcDateTime; } }
public TimeZoneInfo TimeZone { get { return _timeZone; } }
public DateTime LocalTime
{
get
{
return TimeZoneInfo.ConvertTime(_utcDateTime, _timeZone);
}
}
}
我可以使用以下方法序列化对象:
var now = DateTime.Now;
var dateTimeWithZone = new DateTimeWithZone(now, TimeZoneInfo.Local, DateTimeKind.Local);
var serializedDateTimeWithZone = JsonConvert.SerializeObject(dateTimeWithZone);
但是当我使用下面的反序列化它时,我得到一个无效的 DateTime 值 (DateTime.MinValue)
var deserializedDateTimeWithZone = JsonConvert.DeserializeObject<DateTimeWithZone>(serializedDateTimeWithZone);
非常感谢任何帮助。
【问题讨论】:
-
你的类中有太多的逻辑需要序列化程序。它们最适合使用简单的“普通数据”类型(即带有 getter 和 setter 的一堆属性)
-
@Maxwell,我确信我的结构没有内置 DateTime 那么多的逻辑。
标签: c# datetime serialization json.net deserialization