C# 如何最好地在web api和客户端之间显示格式化属性

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

我正在将一个MVC5电子商务项目转换为使用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的客户端(如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,它工作起来很有魅力。