你可以告诉JSON.Net序列化date时间Utc即使未指定?

我的数据库中的date存储为Utc。 但是,当我把它们放回entity framework时,它们就是未指定的types。

当JSON.Net序列化它们时,它们不是Utc格式。 有没有办法告诉JSON.Net序列化date时间为Utc,即使他们的types没有指定为Utc?

JsonSerializerSettings上的DateTimeZoneHandling设置为Utc 。 在序列化之前,将所有date转换为UTC。

 public void SerializeObjectDateTimeZoneHandling() { string json = JsonConvert.SerializeObject( new DateTime(2000, 1, 1, 1, 1, 1, DateTimeKind.Unspecified), new JsonSerializerSettings { DateTimeZoneHandling = DateTimeZoneHandling.Utc }); Assert.AreEqual(@"""2000-01-01T01:01:01Z""", json); } 

文档: DateTimeZoneHandling设置

上面的响应完全有效,所以我使用它来创build一个属性来将PST响应从PST转换为UTC。

首先,我需要创build一个JsonConverter

 public class UTCDateTimeConverter : Newtonsoft.Json.JsonConverter { private TimeZoneInfo pacificZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"); public override bool CanConvert(Type objectType) { return objectType == typeof(DateTime); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.Value == null) return null; var pacificTime = DateTime.Parse(reader.Value.ToString()); return TimeZoneInfo.ConvertTimeToUtc(pacificTime, pacificZone); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { writer.WriteValue(TimeZoneInfo.ConvertTimeFromUtc((DateTime) value, pacificZone)); } } 

然后,我必须将其应用于需要转换的属性

 public class Order{ [JsonConverter(typeof(UTCDateTimeConverter))] public DateTime OrderDate {get;set;} }