使用 DataAnnotation 序列化 JSON 以应用十进制格式规则
Posted
技术标签:
【中文标题】使用 DataAnnotation 序列化 JSON 以应用十进制格式规则【英文标题】:Serialize JSON using DataAnnotation to apply decimal formatting rules 【发布时间】:2017-10-12 05:29:42 【问题描述】:我们有几个具有各种十进制(和其他)属性的复杂类。在几十个十进制属性中,它们都属于 3 种特定的格式规则:
-
前导零,小数点后一位
前导零,两位小数
没有前导零,三位小数
我想用自定义属性装饰各种 DTO 十进制属性,以指定格式规则,如 [DecimalFormatRule(Rule = "x.000")]。
如何确保将这些格式化规则应用于修饰属性,而不干扰为这些相同 DTO 定义的数百个其他属性的反序列化?
我在想我们需要一个可以应用格式化规则的类、带有字符串属性的自定义属性来保存格式化规则,以及一个自定义序列化程序来查找属性并且只处理这些属性。这甚至可能吗?
有没有更好的方法?我不愿意编写自己的序列化程序 - 我肯定更喜欢尽可能多地利用令人敬畏的 ServiceStack 代码。
【问题讨论】:
JsonSerializer - serialize decimal places with 'N2' formatting的可能重复 【参考方案1】:ServiceStack 中没有可用的属性级注释格式,但您可以执行ignoring the decimal property 之类的操作,并添加一个额外的字符串属性获取器来返回您想要的格式,例如:
public class Dto
[IgnoreDataMember]
public decimal Decimal get; set;
public string DecimalFormat => Decimal.ToString("0.##");
【讨论】:
以上是关于使用 DataAnnotation 序列化 JSON 以应用十进制格式规则的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC:通过 DataAnnotation 进行自定义验证
在 ASP.net core mvc 3.1 中的 HtmlHelper 扩展方法中使用 DataAnnotation 本地化器