Создание пользовательского конвертер, который сериализующий DateTime.MinValue
в null
, и (при необходимости) десериализует null
в DateTime.MinValue
:
public class MinDateTimeConverter : DateTimeConverterBase
{
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);
}
}
Вы можете использовать атрибуты, чтобы добавить конвертер к классу данных, как показано в этом примере :
public class Example
{
[JsonConverter(typeof(MinDateTimeConverter))]
public DateTime ValueOne { get; set; }
[JsonConverter(typeof(MinDateTimeConverter))]
public DateTime ValueTwo { get; set; }
}
public static void Main(string[] args)
{
Example data = new Example();
data.ValueOne = DateTime.MinValue;
data.ValueTwo = DateTime.Now;
JsonSerializer serializer = new JsonSerializer();
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, data);
Console.Write(writer.ToString());
}
Console.ReadKey();
}
Консоль вывода:
{"ValueOne":null,"ValueTwo":"2016-10-26T09:54:48.497463+01:00"}
вы можете установить в самой собственности. если его DateTime.MinValue. Помните, что значение DateTime должно быть равно NULL. –
Это, наверное, ошибка, но у нас есть система генерации кода, которая генерирует код сущности для столбцов NOT NULL DateTime как «DateTime». Если столбец Nullable, тип .NET является «DateTime?». Я не думаю, что могу изменить это, не нарушая много кода – Mick
Но, не делая его ничтожным, вы не можете назначить значение null DateTime –