Запретить 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), но ни одного вопроса о добавлении.
Это ошибка, о которой я должен сообщить? Как я могу изменить это поведение по умолчанию?
Ответы
Это не ошибка, а принцип работы библиотеки. Если вы хотите переопределить это поведение, вам понадобится преобразователь настраиваемого типа, например:
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);