dotnet核心Web API中的自定义Json Formatter

时间:2019-09-20 16:48:04

标签: .net json api format core

实际上,我想减小响应JSON的大小(代表十进制)。 现在,我有一堂课被发送了一个令人费解的时间:

public class Article{
    public string Name { get; set; }
    (...)
    public decimal Price { get; set; }
}

价格自动发送为“ 10.000000” 但是我想保存(大约8 KB!)以将十进制格式缩小为“ 10”或“ 10.5”,并删除不必要的零。

为此,我必须编写自己的OutputFormatter,但我只能匹配整个类结构(该类具有更多类),而且我不知道如何动态格式化为Json,而只能以正确的方式来设置小数。 ..

public class CustomDecimalFormatter : OutputFormatter
{
    public string ContentType { get; private set; }

    public CustomDecimalFormatter()
    {
        ContentType = "application/json";
        SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("application/json"));
    }

    protected override bool CanWriteType(Type type)
    {
        return type == typeof(decimal);
    }

    public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext context)
    {
        var response = context.HttpContext.Response;
        var decimalValue = (decimal)context.Object;

        var formatted = decimalValue.ToString("F2", CultureInfo.InvariantCulture);

        await response.WriteAsync(formatted);
    }
}

如何制作通用的Json Response输出并仅自定义小数点?

Thx

1 个答案:

答案 0 :(得分:1)

可能对格式化没有帮助,但是如果您想做的只是发送长度缩短的小数,为什么不创建一个公共属性以返回相同的值?像

class MyClass
{
    private decimal ProductPrice {get;set;}
    public string Price { get { return ProductPrice.ToString("F2", CultureInfo.InvariantCulture); } }
}

这样,您将来就可以轻松调整输出,而无需更改或影响大多数代码。