使用 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 本地化器

DataAnnotation 正则表达式问题

MVC DataAnnotation 不接受空格

text 模型DataAnnotation测试

csharp 创建dataannotation dynamic.cs