-
Notifications
You must be signed in to change notification settings - Fork 22
.NET 6 & Newtonsoft.Json 自定义JsonConverter 返回2位小数
L edited this page Mar 16, 2023
·
2 revisions
有时我们期待我们接口的返回值有自定义格式,比如返回数字12,默认返回12
。有时我们期待返回两位小数,即12.00
。我们可以通过自定义JsonConverter
来完成它。
首先我们引用Microsoft.AspNetCore.Mvc.NewtonsoftJson
。
写自定义JsonConverter:
public class DecimalConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(decimal));
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
decimal? dec = value as decimal?;
if (dec == null)
return;
writer.WriteValue((dec.Value).ToString("0.00"));
}
public override bool CanRead
{
get { return false; }
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
//do nothing
return existingValue;
}
}
使用它:
public class GetNumberWith2Digit
{
[JsonConverter(typeof(DecimalConverter))]
public decimal Data { get; set; }
}
如果我们需要全局使用这个JsonConverter,可以将它添加到SerializerSettings
中。这样就不需要在每个decimal的属性上加JsonConverter了。
builder.Services.AddControllers()
.AddNewtonsoftJson(options =>
{
//Global setting
options.SerializerSettings.Converters.Add(new DotNet6WebAPI.DecimalConverter());
});
DecimalConverter
GetNumberWith2Digit
DecimalTestController
Program
Adding two decimal point .00 when returning the result from web API
Custom JsonConverter with parameters in .NET Core