Erstellen Sie einen benutzerdefinierten Konverter, die DateTime.MinValue
in null
serialisiert und (falls erforderlich) deserialisiert null
in 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);
}
}
Sie können dann als Attribut den Konverter, um Ihre Daten Klasse hinzuzufügen, in diesem Beispiel gezeigt :
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();
}
Console Ausgang:
{"ValueOne":null,"ValueTwo":"2016-10-26T09:54:48.497463+01:00"}
Sie in Immobilien-Objekt selber festlegen können. wenn es DateTime.MinValue ist. Denken Sie daran, Ihre DateTime sollte nullbar sein. –
Es ist wahrscheinlich ein Fehler, aber wir haben ein Code-Generierungssystem, das Entity-Code für NOT NULL DateTime-Spalten als 'DateTime' generiert. Wenn die Spalte Nullable ist, ist der .NET-Typ "DateTime?". Ich denke nicht, dass ich das ändern könnte, ohne viel Code zu brechen – Mick
Aber ohne NULL-fähig zu machen, können Sie DateTime keinen NULL-Wert zuweisen –