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