C.J*_*.J. 51 javascript asp.net entity-framework json.net
我的数据库中的日期存储为Utc.但是当我用实体框架对它们进行修复时,它们的出现类型未指定.
当JSON.Net序列化它们时,它们不是Utc格式.有没有办法告诉JSON.Net将DateTimes序列化为Utc,即使它们的类型未指定为Utc?
Jam*_*ing 102
设置DateTimeZoneHandling上JsonSerializerSettings要Utc.这将在序列化之前将所有日期转换为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);
}
Run Code Online (Sandbox Code Playgroud)
Jus*_*ier 13
上面的响应完全有效,因此我使用它来创建一个属性,将API响应从PST转换为UTC.
首先,我需要创建一个 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));
}
}
Run Code Online (Sandbox Code Playgroud)
然后我不得不将其应用于需要转换的属性
public class Order{
[JsonConverter(typeof(UTCDateTimeConverter))]
public DateTime OrderDate {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36919 次 |
| 最近记录: |