有时我们期待我们接口的返回值有自定义格式,比如返回数字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】。
 如果,你希望更容易地发现我的新博客,不妨点击一下【关注】。
    
    










