2017-10-08 2 views
-1

Für DateTime Typ arbeiten, wenn ich eine DateTime Eigenschaft in einer Klasse haben, dann versuche ich, diese Klasse zu modellieren binden mit HTTP-Post json Körper, die DateTime Eigenschaft nicht gebunden bekommen , Wie das? Aber wenn ich die Parameterbindung verwende, funktioniert es gut. So unten Code funktioniertASP.NET Web API: Datetime-Bindung nicht in json Körper

[Route("v1/taxiqi")] 
[HttpPost] 
public object UpdateTaxiQI(string status, DateTime updateTime) 
{ 
    ... 
} 

Aber nicht für Code unten

[Route("v1/taxiqi")] 
[HttpPost] 
public object UpdateTaxiQI(TaxiQI taxiQI) 
{ 
    ... 
} 
public class TaxiQI 
{ 
    public string Status; 
    public DateTime UpdateTime; 
} 

ich das neueste ASP.NET Web API verwenden. Die Felder funktionieren, während sie an meiner anderen API arbeiten, außerdem wurde das Statusfeld erfolgreich gebunden. Und ich habe schon Eigenschaften probiert, gleiches Ergebnis.

Sorry, fand ich die Ursache, ist es durch unsere Codebasis verursacht wird, eine benutzerdefinierte DateTimeConverter für JSON.NET mit und erwartet eine JavaScript-Stil Ticks statt eines Datums-String

+0

Wo ist Ihr Getter verursacht wird und Setzer? – Svek

+0

Bitte aktualisieren Sie Ihren Beitrag, um Ihren Beispiel-JSON anzuzeigen. – mjwills

+0

Welche Version von ASP.NET WebAPI verwenden Sie? Frühere Versionen verwenden 'DataContractJsonSerializer', siehe [Json-Serialisierer in ASP.NET und anderen] (https://techblog.dorogin.com/json-serializers-in-asp-net-and-other-e12d3d62933f). – dbc

Antwort

2

Ihre TaxiQI Klasse nicht korrekt ist.
Der JSON arbeitet mit öffentlichen Eigenschaften, nicht mit öffentlichen Feldern. Ändern Sie Ihre Klasse dazu:

public class TaxiQI 
{ 
    public string Status { get; set; } 
    public DateTime UpdateTime { get; set; } 
} 
+0

Ich verwende die neueste ASP.NET-Web-API. Felder arbeiten, während es an meinem anderen Modell arbeitet, außerdem ist das Statusfeld erfolgreich gebunden – imgen

1

Neben Svek Antwort, kann es klüger sein, ein Nullable<DateTime> oder DateTime? stattdessen zu verwenden. Nullwerte sind eine intrinsische Möglichkeit, wenn Sie Daten deserialisieren.

+0

Ich habe DateTime versucht? ebenso, das gleiche Ergebnis – imgen

0

ich die Ursache herausgefunden, mein schlecht, es durch unsere Codebasis wird mit einem benutzerdefinierten Datetimeconverter für JSON.NET und erwartet ein JavaScript-Stil Ticks statt einem Datums-String