2016-12-20 2 views
4

Ich habe ein Problem mit dem DateTime-Format, das von ServiceStack verwendet wird.ServiceStack DateTime-Behandlung

Zum Beispiel habe ich eine einfache Anfrage Objekt wie folgt.

public class GetAllUpdatedStudents : IReturn<GetAllUpdatedStudentsResponse> 
{ 
    public DateTime LastUpdate { get; set; } 
} 

Wenn ein Datumzeit Einreichung (tt/mm/jjjj) von 2016.12.10, ServiceStack wandelt es in eine Datums- und Uhrzeitformat von (tt/mm/jjjj), so dass das System glaubt, es ist der 12. October anstelle vom 10. Dezember.

Wie sage ich ServiceStack dies nicht zu tun und uns das Format von MM/TT/JJJJ beim Binden von DateTime-Eigenschaften, um Objekte anzufordern?

Antwort

1

Die am besten geeignete und ambitionierteste Möglichkeit, DateTime über die Leitung zu senden, ist die Verwendung der ISO 8601 Date Format. ServiceStack unterstützt mehrere Datumsformate mit zahlreichen Variationen von IS0 8601, aber es gibt keine Konfiguration in ServiceStack, die Formate mit einem Monat vor dem Datum wie mm/dd/yyyy unterstützt, das als dd/mm/yyyy interpretiert wird. Um Unklarheiten zu vermeiden, sollten Sie idealerweise YYYY-MM-DD Formate senden.

Wenn Sie MM/DD/YYYY annehmen möchten, können Sie es in eine Zeichenfolge ändern, z:

public class GetAllUpdatedStudents : IReturn<GetAllUpdatedStudentsResponse> 
{ 
    public string LastUpdate { get; set; } 
} 

Dann analysieren sie Ihre bevorzugte Datums- und Uhrzeitformat innerhalb der Service-Implementierung verwenden.

Sie könnten die Einbau-Datetime Serialisierung außer Kraft setzen Sie es in Ihrem spezifischen Datumsformat mit so etwas wie zu analysieren:

JsConfig.DeSerializeFn = str => { 
    return DateTime.ParseExact(str,"MM/dd/yyyy",null); 
}; 

Aber ich würde empfehlen, gegen dies zu tun als Ihre Dienstleistungen nicht als interoperabel sein würden.

+1

Ausgezeichnet. Ich habe eigentlich fast dasselbe gemacht. Ich habe alle meine DateTime-Eigenschaften in String geändert. Dann überprüfte ich mithilfe des Validierungs-Plugins, dass die übergebene Zeichenfolge dem YYYY-MM-DD-Format folgte. Der nächste Schritt besteht darin, zu bestätigen, dass das Datum tatsächlich ein gültiges Datum ist. Ich muss sagen, dass ServiceStack die Programmierung wieder Spaß gemacht hat! Dank. – cletisgipson