2017-03-22 1 views
1

Ich hatte ein Problem mit meiner .NET Core API wo, wenn DateTimes serialisiert wurden, würde es Millisekunden lassen, wenn der Wert 0 war. This Frage erläutert das Problem. Ich fügte hinzu, Startup-Klasse die folgenden meiner .NET-Core und es löste das Problem, dass, wenn ich ein GET tat, alle Daten korrekt formatiert werden würde:IsoDateTimeConverter hinzugefügt zu .NET API bricht Standardmodellbindung

services.AddMvc() 
    .AddJsonOptions(options => 
    { 
     var settings = options.SerializerSettings; 
     var dateConverter = new IsoDateTimeConverter 
     { 
      DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff" 
     }; 
     settings.Converters.Add(dateConverter); 
    }); 

Nach der Implementierung dieses fand ich, dass es Standard-Modell Bindungen brach anderswo. Zum Beispiel habe ich einen POST Endpunkt, den das folgende Ansichtsmodell akzeptiert:

public class PatientRegistrationViewModel 
{ 
    public DateTime DateOfBirth { get; set; } 
} 

Früher vorging ich die folgenden JSON-Daten in der Anforderungs Stelle, die sie erfolgreich gebunden:

{ 
    dateOfBirth: '1981-04-18' 
} 

Nach der Implementierung des Datums-Wandlers oben ist das Viewmodel in meinem Controller gleich null.

+0

Hast du vielleicht nur vergessen, die ' 'Z'' am Ende der' DateTimeFormat' String? – haindl

+0

@haindl Leider, die es nicht taten. – im1dermike

Antwort

0

Eine schnelle Lösung ist WriteOnlyIsoDateTimeConverter einzuführen und zu verwenden:

public class WriteOnlyIsoDateTimeConverter : IsoDateTimeConverter 
{ 
    public override bool CanRead { get { return false; } } 
} 

Durch das Überschreiben CanRead false zurück, sollte das Modell Bindemittel weiterhin die derzeit Parsing integrierten Datum verwenden, während der Konverter für die Ausgabeformatierung verwenden.

Eine weitere Option könnte sein, die JsonOutputFormatter zu ersetzen, wie in this question gezeigt.

+0

'WriteOnlyIsoDateTimeConverter' FTW! – im1dermike