Web API-我获得十进制属性的10个,但我想要10.00



我有一个WebAPI服务,该服务返回具有十进制值的值字段的对象。问题是当值为10.00时,我将收到以下JSON:

{
     "value" : 10
}

,但我想要

{
     "value" : 10.00
}

public class SomethingDto
{
    public decimal value { get; set; }
}

我正在与jsonConverters一起玩,但不能完全掌握我需要做的事情才能使我的服务输出10.00而不是十进制属性的10个。有人知道如何解决这个问题吗?

如果您真的希望在JSON中格式化该值,并且在解析时仍然保留一个数字,则可以使用自定义JsonConverter进行此操作。但是,请注意,当客户用标准解析器解析JSON时,格式将丢失。这是因为格式不是用数字值存储的。保留格式的唯一方法是将数字作为字符串输出,如其他几个人所述。

这是转换器所需的代码:

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.WriteRawValue(((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();
    }
}

小提琴:https://dotnetfiddle.net/jkzk4b

要将此转换器与Web API一起使用,您需要将其插入配置。将其添加到WebApiConfig类中的Register方法:

var jsonSettings = config.Formatters.JsonFormatter.SerializerSettings;
jsonSettings.C‌​onverters.Add(new DecimalConverter());

注意:如果您确实决定要输出小数作为预先格式化的字符串而不是数字,则可以将相同的转换器与一个小更改一起使用。在WriteJson方法中,将WriteRawValue更改为WriteValue

小提琴:https://dotnetfiddle.net/jxjmrz

您可能需要为此使用字符串返回类型,并且在您的Get属性中使用string.format将值返回到所需的小数位置。或者您可以在JSONConverter中尝试此功能

如果要获得无法更改的原始数据的值,请尝试更改数据层中的格式。

decimal value_formatted = Decimal.Parse(value.ToString("0.00"));

这将为您提供一般2个小数点的综述。

value.ToString("0.00")可能是您应采取的措施,以确保在值具有 .00

时,在字符串中呈现2个小数点。

相关内容

  • 没有找到相关文章

最新更新