Mencegah NewtonSoft Json menambahkan 0 trailing [duplikat]
Saya menghadapi masalah tak terduga dengan NewtonSoft.Json
perpustakaan. Tampaknya itu menambahkan 0 trailing ke nilai desimal yang tidak memiliki bagian desimal:
JsonConvert.SerializeObject(1m)
Akan mengembalikan string berikut: "1.0"
.
Meskipun ini bukan masalah dalam banyak kasus, dalam kasus saya, saya sangat peduli dengan ketepatan yang diberikan pengguna. Jika pengguna masuk 1
, saya perlu menyimpan 1
di database saya. Jika dia menyediakan 1.0
maka saya perlu menyimpan 1.0
.
Saya menggunakan versi terakhir pustaka:, 12.0.3
tetapi saya mencoba dengan semua versi utama sebelumnya hingga 9.0.1
, dan semuanya menghasilkan hasil yang sama.
Saya telah melihat beberapa pertanyaan tentang library yang menghapus trailing 0 (dilaporkan sebagai bug, diperbaiki di versi 11.X), tetapi tidak ada tentang menambahkan satu.
Apakah ini bug yang harus saya laporkan? Bagaimana cara mengganti perilaku default ini?
Jawaban
Ini bukan bug, ini cara kerja perpustakaan. Jika Anda ingin menimpa perilaku ini, Anda memerlukan konverter tipe kustom, misalnya:
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());
}
}
Dan sekarang buat serial seperti ini:
var settings = new JsonSerializerSettings
{
Converters = new[] { new DecimalJsonConverter() }
};
var json = JsonConvert.SerializeObject(1m, settings);