有时我们期待我们接口的返回值有自定义格式,比如返回数字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());
});
示例代码
DecimalConverterGetNumberWith2DigitDecimalTestControllerProgram
参考资料
Adding two decimal point .00 when returning the result from web APICustom JsonConverter with parameters in .NET Core
学习技术最好的文档就是【官方文档】,没有之一。
还有学习资料【Microsoft Learn】、【CSharp Learn】、【My Note】。
如果,你希望更容易地发现我的新博客,不妨点击一下【关注】。