Impedir que NewtonSoft Json adicione 0 à direita [duplicado]
Estou enfrentando um problema inesperado com a NewtonSoft.Json
biblioteca. Parece que adiciona um 0 à direita aos valores decimais que não têm uma parte decimal:
JsonConvert.SerializeObject(1m)
Irá retornar a seguinte cadeia: "1.0"
.
Embora não seja um problema em muitos casos, no meu caso, me preocupo com a precisão que os usuários estão fornecendo. Se um usuário entrar 1
, preciso armazenar 1
em meu banco de dados. Se ele fornecer, 1.0
então eu preciso armazenar 1.0
.
Estou usando a última versão da biblioteca:, 12.0.3
mas tentei com todas as versões principais anteriores até 9.0.1
, e todas produziram o mesmo resultado.
Tenho visto várias perguntas sobre a remoção da biblioteca de 0 à direita (relatado como um bug, corrigido na versão 11.X), mas nenhuma sobre a adição de um.
Este é um bug que devo relatar? Como posso substituir esse comportamento padrão?
Respostas
Não é um bug, é como a biblioteca funciona. Se desejar substituir esse comportamento, você precisará de um conversor de tipo personalizado, por exemplo:
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());
}
}
E agora serialize assim:
var settings = new JsonSerializerSettings
{
Converters = new[] { new DecimalJsonConverter() }
};
var json = JsonConvert.SerializeObject(1m, settings);