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 次  |  
        
|   最近记录:  |