我有一个webapi服务,它返回一个带有十进制值字段的对象。问题是当值为10.00时,我收到以下json:
{
"value" : 10
}
但我想要
{
"value" : 10.00
}
public class SomethingDto
{
public decimal value { get; set; }
}
我正在玩JsonConverters,但我不能完全了解我需要做什么来使我的服务输出10.00而不是10我的小数属性。有谁知道如何解决这个问题?
答案 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.Converters.Add(new DecimalConverter());
注意:如果您确定要将小数输出为预先格式化的字符串而不是数字,那么您可以使用相同的转换器进行一次小的更改。在WriteJson
方法中,将WriteRawValue
更改为WriteValue
。
答案 2 :(得分:-1)
如果您将该值作为无法更改的原始数据获取,请尝试更改数据层中的格式。
decimal value_formatted = Decimal.Parse(value.ToString("0.00"));
一般会给你一个小数点后的2位小数。
value.ToString("0.00")
可能是您应该做的,以确保当值为.00