Verhindern Sie, dass NewtonSoft Json nachgestellte 0 hinzufügt [doppelt]
Ich habe ein unerwartetes Problem mit der NewtonSoft.Json
Bibliothek. Es scheint, dass Dezimalwerten, die keinen Dezimalteil haben, eine nachfolgende 0 hinzugefügt wird:
JsonConvert.SerializeObject(1m)
Gibt die folgende Zeichenfolge zurück : "1.0"
.
Obwohl dies in vielen Fällen kein Problem darstellt, ist mir in meinem Fall die Präzision der Benutzer wichtig. Wenn ein Benutzer eintritt 1
, muss ich 1
in meiner Datenbank speichern. Wenn er zur Verfügung stellt, muss 1.0
ich speichern 1.0
.
Ich verwende die letzte Version der Bibliothek : 12.0.3
, aber ich habe es mit allen vorherigen Hauptversionen bis auf 9.0.1
versucht, und alle führen zum gleichen Ergebnis.
Ich habe mehrere Fragen zum Entfernen der nachfolgenden 0 durch die Bibliothek gesehen (als Fehler gemeldet, in Version 11.X behoben), aber keine zum Hinzufügen einer.
Ist das ein Fehler, den ich melden sollte? Wie kann ich dieses Standardverhalten überschreiben?
Antworten
Es ist kein Fehler, so funktioniert die Bibliothek. Wenn Sie dieses Verhalten überschreiben möchten, benötigen Sie einen benutzerdefinierten Typkonverter, zum Beispiel:
public class DecimalJsonConverter : JsonConverter<decimal>
{
public override decimal ReadJson(JsonReader reader, Type objectType,
decimal existingValue, bool hasExistingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer,
decimal value, JsonSerializer serializer)
{
// Customise how you want the decimal value to be output in here
// for example, you may want to consider culture
writer.WriteRawValue(value.ToString());
}
}
Und jetzt serialisieren Sie so:
var settings = new JsonSerializerSettings
{
Converters = new[] { new DecimalJsonConverter() }
};
var json = JsonConvert.SerializeObject(1m, settings);