Can you tell JSON.Net to serialize DateTime as Utc even if unspecified?

前端 未结 5 973
遇见更好的自我
遇见更好的自我 2020-11-29 03:45

Dates in my database are stored as Utc. But when I retreieve them w/ the entity framework they come out as type unspecified.

When JSON.Net serializes them they are n

5条回答
  •  一整个雨季
    2020-11-29 04:12

    The response above totally works, and so I used that to create an attribute to convert an API response from PST to UTC.

    First I needed to create a 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));
        }
    }
    

    Then I had to apply that to the properties that needed to be converted

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

提交回复
热议问题