.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

posted @ 2022-12-09 13:07  Lulus  阅读(922)  评论(0编辑  收藏  举报