web api - 我得到10的小数属性,但我想要10.00

时间:2016-11-22 23:55:52

标签: c# json.net asp.net-web-api2

我有一个webapi服务,它返回一个带有十进制值字段的对象。问题是当值为10.00时,我收到以下json:

{
     "value" : 10
}

但我想要

{
     "value" : 10.00
}


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

我正在玩JsonConverters,但我不能完全了解我需要做什么来使我的服务输出10.00而不是10我的小数属性。有谁知道如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果您确实希望在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一起使用,您需要将其插入配置中。将其添加到Register类中的WebApiConfig方法:

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

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

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

答案 2 :(得分:-1)

如果您将该值作为无法更改的原始数据获取,请尝试更改数据层中的格式。

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

一般会给你一个小数点后的2位小数。

value.ToString("0.00")可能是您应该做的,以确保当值为.00

时,在字符串的术语中显示2位小数