JSON.NET Serialize DateTime.MinValue as null

后端 未结 2 954
忘了有多久
忘了有多久 2021-01-04 04:32

I\'d like DateTime fields that are set to DateTime.MinValue returned by my Web API to be serialized to NULL instead of \"0001-01

2条回答
  •  感情败类
    2021-01-04 05:11

    Custom DateTime Json Converter

    public class DateTimeConverter : JsonConverter
    {   
        public override void WriteJson(JsonWriter jsonWriter, object inputObject,JsonSerializer jsonSerializer)
        {
            // Typecast the input object
            var dateTimeObject = inputObject as DateTime?;
    
            // Set the properties of the Json Writer
            jsonWriter.Formatting = Newtonsoft.Json.Formatting.Indented;
    
            if(dateTimeObject == DateTime.MinValue)
                jsonWriter.WriteValue((DateTime?)null);
            else
                jsonWriter.WriteValue(dateTimeObject);
        }
    
    
        public override object ReadJson(JsonReader reader,
            Type objectType,
            object existingValue,
            JsonSerializer serializer)
        {
            DateTime? readValue = reader.ReadAsDateTime();
    
            return (readValue == null) ? DateTime.MinValue : readValue;     
    
        }
    
    
        public override bool CanConvert(Type objectType)
        {
            return typeof(DateTime?).IsAssignableFrom(objectType);
        }
    }
    

    Usage:

    public class DateTest
    {
        [JsonConverterAttribute(typeof(DateTimeConverter))]
        public DateTime? MyDateTime { get; set;}
    
        [JsonConverterAttribute(typeof(DateTimeConverter))]
        public DateTime? MyDateTime1 { get; set; }
    }
    
    void Main()
    {
        DateTest dateTest = new DateTest 
        { 
          MyDateTime = DateTime.MinValue, 
          MyDateTime1 = DateTime.MaxValue
        };
    
        Console.WriteLine(JsonConvert.SerializeObject(dateTest));
    }
    

    Result:

    {
      "MyDateTime": null,
      "MyDateTime1": "9999-12-31T23:59:59.9999999"
    }
    

提交回复
热议问题