我正在将 MVC 5 电子商务项目转换为使用 WEB API 服务,以便也为其开发移动应用程序。我需要有关如何最好地处理产品价格的建议。 在当前的 mvc 应用程序中,DisplayFormat 属性工作得很好。
[DisplayFormat(DataFormatString = "{0:C}", ApplyFormatInEditMode = false, NullDisplayText = "-")]
public decimal Price { get; set; }
上面显示了预期的货币(例如 $200.29),但这似乎在 Web api 中不起作用。它仅返回十进制的价格数字。现在所有业务逻辑都位于 api 中。 现在我的问题:有没有办法直接从 api 发送这种货币的格式化类型(即显示为货币,例如 $200.29),这样我就不必在所有使用该 api 的客户端中处理格式,例如移动和网络? 或者 我必须处理所有客户端中的格式?
最佳答案
您可以编写转换器并附加为属性,以便在反序列化期间,数据按照转换器中定义的格式返回。
例如,下面的类表示将小数转换为货币格式
internal class CurrencyConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(decimal) || objectType == typeof(decimal?));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
Decimal? d = value as decimal?;
JToken.FromObject(string.Format("{0:C}", d.GetValueOrDefault())).WriteTo(writer);
}
}
现在上述转换器可以应用于属性
public class Order
{
public string Item {get; set;}
[JsonConverter(typeof(CurrencyConverter))]
public decimal Price {get; set;}
}
当 WebApi 返回响应时,特性价格将是如下所示的货币格式
{"Item":"Some Item","Price":"$2.34"}
你可以引用这个dotnet fiddle - https://dotnetfiddle.net/c5FTDz
关于c# - 如何最好地在 Web api 和客户端之间显示格式化属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65542020/