【发布时间】:2021-07-29 06:42:25
【问题描述】:
我在 Newtonsoft.Json 中使用 DateTimeFormat 时遇到问题。我发布到的 API 在所有日期上都需要毫秒。我正在序列化的对象有许多日期字段,其中一些对于某些数据为空。
我似乎无法让 JSON 为空日期输出 null 并在具有日期的字段中包含毫秒。我可以让一个或另一个工作,但不能同时工作。
很确定这是一件小事,但我还没有设法深入了解它,我已经花了几天时间。
这会正确输出 null,但不包括毫秒:
public string ToJson()
{
return JsonConvert.SerializeObject(this, new MinDateTimeConverter()).ToString();
}
public class MinDateTimeConverter : IsoDateTimeConverter
{
public MinDateTimeConverter()
{
DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff'Z'";
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.Value == null)
return DateTime.MinValue;
return (DateTime)reader.Value;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
DateTime dateTimeValue = (DateTime)value;
if (dateTimeValue == DateTime.MinValue)
{
writer.WriteNull();
return;
}
writer.WriteValue(value);
}
}
这是输出:
"dateOfBirth": "1943-03-02T00:00:00Z",
"dateOfDeath": null`
这会正确输出包括毫秒在内的日期,但空日期也会转换为 DateTime:
public string ToJson()
{
return JsonConvert.SerializeObject(this, new IsoDateTimeConverter() { DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff'Z'" }).ToString();
}
这是输出:
"dateOfBirth": "1943-03-02T00:00:00.000Z",
"dateOfDeath": "0001-01-01T00:00:00.000Z"
我查看了以下两篇 SO 文章,但无法让它们一起工作。
Force JSON.NET to include milliseconds when serializing DateTime (even if ms component is zero)
JSON.NET Serialize DateTime.MinValue as null
非常感谢任何帮助。
【问题讨论】: