2017-11-17 1 views
1

Ich habe einige Attribute von einem Rest-Service zurückgegeben, die als ein Array von Name-Wert-Paaren dienen.Verhindern, dass Json.NET eine Zeichenfolge als Datum interpretiert

In einigen Fällen ist der Wert ist ein Datum in Universal sortierbar Format ausgedrückt: { "name": "Modification-Date", "Wert": "2017-11-13T15: 15: 13.968Z" }

Wenn es vom Deserialiser geparst wird, wird der Wert als Datum identifiziert, aber da das Objekt deserialisiert wird, hat er den Typ string für name und value. Das Datum wird dann in string konvertiert und verliert Genauigkeit: "13/11/2017 15:15:13"

Dies ist leicht sichtbar, indem Sie einen Konverter für den NameValue-Typ verwenden.

if (reader.TokenType == JsonToken.StartObject) 
{ 
    var item = JObject.Load(reader); 

    return new NameValueFacet() 
    { 
     Name = item["name"].Value<string>(), 
     Value = item["value"].Value<string>() 
    }; 
} 

Element ["Wert"]. Typ zeigt den Typ ist Datum.

Wie bekomme ich es, dass Json.NET es als String, "unparsed" lassen?

+2

Einstellung reader.DateParseHandling = DateParseHandling.None; vor dem Aufruf von JObject.Load (Reader) löst das Problem. Gibt es eine Möglichkeit, ein Json-Attribut für die Value-Eigenschaft meiner NameValue-Klasse anzugeben, um dasselbe Ergebnis zu erhalten, ohne einen Konverter verwenden zu müssen? –

+0

Bitte bearbeiten Sie Ihre Frage, anstatt sie in einen Kommentar zu schreiben. –

+1

Es gibt kein Attribut, das das Parsing von Datumsangaben für eine einzelne Eigenschaft deaktiviert, Sie können es jedoch global ausschalten, indem Sie 'DateParseHandling = DateParseHandling.None' in' JsonSerializerSettings' setzen und die Einstellungen an 'JsonConvert.DeserializeObject' übergeben. Geige: https://dotnetfiddle.net/1y1bXM –

Antwort

0

Sie können mit Newtonsoft versuchen. Siehe unten.

JsonConvert.DeserializeObject<your_object>(your_json, new IsoDateTimeConverter{ DateTimeFormat = "dd/MM/yyy" }); 
Verwandte Themen