【问题标题】:Adding two decimal point .00 when returning the result from web API从 Web API 返回结果时添加两个小数点 .00
【发布时间】:2021-07-01 22:23:37
【问题描述】:

我有一个 asp.net 核心 Web API 项目,当我将 JSON 结果返回到 UI 时,所有十进制值都转换为整数,当我调试控制器时,我可以看到两个小数点 .00 但是当我在控制台网络选项卡中检查它时,它会以整数形式出现。

那么,我如何添加一个格式化程序来保持来自数据库的十进制值,它不应该在到达 UI 时将其转换为整数。

当我调试控制器时 -

在控制台网络选项卡中-

【问题讨论】:

  • 在代码中的某个位置,您将变量声明为 int 而不是小数。
  • float/double 而不是decimal(除decimal 之外的任何数字类型都会有您在JSON 序列化期间描述的行为)
  • 请将代码和数据添加为文本(使用代码格式),而不是图像。图片:A)不允许我们复制粘贴代码/错误/数据进行测试; B) 不允许根据代码/错误/数据内容进行搜索; C) 视觉障碍用户难以清晰阅读以及更多原因。除了代码格式的文本之外,只有在图像添加了一些重要的东西,而不仅仅是文本代码/错误/数据传达的内容时,才应该使用图像。

标签: c# asp.net-core asp.net-web-api asp.net-core-webapi webapi


【解决方案1】:

您可以为小数属性自定义序列化程序

public class TestModel
{
    [JsonConverter(typeof(DecimalConverter))]
    public decimal Price { get; set; }
}

public class DecimalConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return (objectType == typeof(decimal));
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteValue(((decimal)value).ToString("0.00"));
    }

    public override bool CanRead
    {
        get { return false; }
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    相关资源
    最近更新 更多