Gibt es eine Möglichkeit, das standardmäßige Deserialisierungsverhalten von Json.net beim Umgang mit primitiven Typen zu überschreiben? Zum Beispiel, wenn das Deserialisieren json Array [3.14,10,"test"]
auf eine Art von object[]
3,14 wird der Typ sein double
und 10 wird vom Typ long
. Kann ich diese Typentscheidungen trotzdem abfangen oder überschreiben, sodass ich die Werte als decimal
bzw. int
deserialisieren kann?Überschreiben der standardmäßigen primitiven Typbehandlung in Json.Net
Ich möchte grundsätzlich immer json Ganzzahlen als int
zurückgeben und schwebt, um als decimal
zurückzukehren. Dies wird mir ersparen einige double
zu decimal
Konvertierungen in meinem Code zu injizieren.
Ich habe in Erweiterung Newtonsoft.Json.Serialization.DefaultContractResolver
untersucht und meine eigene Newtonsoft.Json.JsonConverter
implementieren, aber ich habe keine Möglichkeit gefunden, diese gewünschte Überschreibung zu implementieren.
Beispiel-Code zu reproduzieren
object[] variousTypes = new object[] {3.14m, 10, "test"};
string jsonString = JsonConvert.SerializeObject(variousTypes);
object[] asObjectArray = JsonConvert.DeserializeObject<object[]>(jsonString); // Contains object {double}, object {long}, object {string}
JsonTextReader.SetToken nicht als virtuelle in meiner Freilassung von json.net 4.5.1, so dass die Überschreibung gekennzeichnet wirft eine "keine geeignete Methode zum Überschreiben". Fehle ich etwas? –
@MatthewRuston Meine aktuelle Json.Net Version ist '4.0.5'. –
sieht so aus, als hätten sie die virtuelle Eigenschaft in einer kürzlich veröffentlichten Version entfernt. Seltsam. –