NewtonSoftJsonが末尾の0を追加しないようにします[重複]
Dec 01 2020
NewtonSoft.Json
ライブラリで予期しない問題が発生しています。小数部を持たない小数値に末尾の0を追加するようです。
JsonConvert.SerializeObject(1m)
次の文字列を返します:"1.0"
。
多くの場合問題にはなりませんが、私の場合は、ユーザーが提供する精度に関心があります。ユーザーが入力した場合、データベース1
に保存する必要があり1
ます。彼が提供する場合1.0
、私は保存する必要があり1.0
ます。
ライブラリの最後のバージョンを使用しています:12.0.3
、しかし、以前のすべてのメジャーバージョンをまで試してみたところ、すべて9.0.1
同じ結果が得られました。
ライブラリが末尾の0を削除することについていくつかの質問を見ました(バグとして報告され、バージョン11.Xで修正されました)が、1を追加することについては何もありません。
これは私が報告すべきバグですか?このデフォルトの動作をオーバーライドするにはどうすればよいですか?
回答
1 DavidG Dec 01 2020 at 15:55
これはバグではなく、ライブラリの動作方法です。この動作をオーバーライドする場合は、次のようなカスタム型コンバーターが必要になります。
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());
}
}
そして今、このようにシリアル化します:
var settings = new JsonSerializerSettings
{
Converters = new[] { new DecimalJsonConverter() }
};
var json = JsonConvert.SerializeObject(1m, settings);