.NET 6 & Newtonsoft.Json 自定义JsonConverter 返回2位小数
有时我们期待我们接口的返回值有自定义格式,比如返回数字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
学习技术最好的文档就是【官方文档】,没有之一。
还有学习资料【Microsoft Learn】、【CSharp Learn】、【My Note】。
如果,你认为阅读这篇博客让你有些收获,不妨点击一下右下角的【推荐】按钮。
如果,你希望更容易地发现我的新博客,不妨点击一下【关注】。