C# 如何最好地在web api和客户端之间显示格式化属性
我正在将一个MVC5电子商务项目转换为使用WEB API服务,以便为其开发一个移动应用程序。我需要关于如何最好地处理产品价格的建议。 在当前的mvc应用程序中,DisplayFormat属性工作得非常好C# 如何最好地在web api和客户端之间显示格式化属性,c#,asp.net,json,asp.net-mvc,asp.net-web-api,C#,Asp.net,Json,Asp.net Mvc,Asp.net Web Api,我正在将一个MVC5电子商务项目转换为使用WEB API服务,以便为其开发一个移动应用程序。我需要关于如何最好地处理产品价格的建议。 在当前的mvc应用程序中,DisplayFormat属性工作得非常好 [DisplayFormat(DataFormatString = "{0:C}", ApplyFormatInEditMode = false, NullDisplayText = "-")] public decimal Price { get; se
[DisplayFormat(DataFormatString = "{0:C}", ApplyFormatInEditMode = false, NullDisplayText = "-")]
public decimal Price { get; set; }
上面显示了预期的货币(例如$200.29),但这在web api中似乎不起作用。它只返回十进制的价格数字。所有业务逻辑现在都存在于api中。
现在我的问题是:有没有一种方法可以直接从api发送格式化类型的货币(即显示为货币,例如$200.29),这样我就不必在所有使用api的客户端(如mobile和web)中处理格式化?
或
我必须处理所有客户端中的格式设置?您可以编写转换器并附加为属性,因此在反序列化过程中,数据将按照转换器中定义的格式返回 例如,下面的类表示将十进制格式转换为货币格式
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小提琴-Thank man@user1672994,它工作起来很有魅力。