NewtonSoft Json이 후행 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 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);