阻止NewtonSoft Json添加尾部0



NewtonSoft.Json库出现意外问题。它似乎将尾部0添加到没有小数部分的十进制值中:

JsonConvert.SerializeObject(1m)

将返回以下字符串:"1.0"

虽然在很多情况下这不是一个问题,但就我而言,我确实关心用户提供的精度。如果用户输入1,我需要将1存储在数据库中。如果他提供1.0,那么我需要存储1.0

我使用的是库的最后一个版本:12.0.3,但我尝试了所有以前的主要版本,直到9.0.1,它们都产生了相同的结果。

我看到了几个关于库删除尾部0的问题(报告为一个错误,在版本11.X中修复(,但没有关于添加一个的问题。

这是我应该报告的错误吗?如何覆盖此默认行为?

这不是bug,而是库的工作方式。如果你想覆盖这种行为,你需要一个自定义类型的转换器,例如:

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);

相关内容

  • 没有找到相关文章

最新更新