using NCC.Dependency; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System; namespace NCC.JsonSerialization { /// /// DateTime 类型序列化 /// [SuppressSniffer] public class NewtonsoftDateTimeJsonConverter : DateTimeConverterBase { internal static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); /// /// 读 /// /// /// /// /// /// public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.Value == null || string.IsNullOrEmpty(reader.Value.ToString())) { return null; } else { if (reader.TokenType == JsonToken.Date) { return reader.Value; } else if (reader.TokenType == JsonToken.String) { return DateTime.Parse(reader.Value.ToString()); } else { return UnixEpoch.AddMilliseconds(Convert.ToInt64(reader.Value)).ToLocalTime(); } } } /// /// 写 /// /// /// /// public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { //long seconds; //if (value is DateTime dateTime && !writer.Path.Contains("data.list") && !writer.Path.Contains("Field")) //{ // seconds = (long)(dateTime.ToUniversalTime() - UnixEpoch).TotalMilliseconds; // writer.WriteValue(seconds); //} //else if(value is DateTime dateTime1 && (writer.Path.Contains(".latestDate")|| writer.Path.Contains(".lastModifyTime"))) //{ // seconds = (long)(dateTime1.ToUniversalTime() - UnixEpoch).TotalMilliseconds; // writer.WriteValue(seconds); //} //else //{ // writer.WriteValue(value); //} long seconds; if (value is DateTime dateTime) { seconds = (long)(dateTime.ToUniversalTime() - UnixEpoch).TotalMilliseconds; writer.WriteValue(seconds); } else { writer.WriteValue(value); } } } }