我目前正在使用一个以各种不同格式返回日期的 API(理想情况下,它们会标准化其格式),因此我在每个属性上放置了 JsonConvertAttribute 属性以正确反序列化它们,如下所示:
[JsonConverter(typeof(dMMyyyyWithSlashesConverter))]
public DateTime SomeDate { get; set; }
[JsonConverter(typeof(MMyyyyWithSlashesConverter))]
public DateTime AnotherDate { get; set; }
[JsonConverter(typeof(yyyyMMWithoutSlashesConverter))]
public DateTime AnnoyingDate { get; set; }
所以对于每种日期格式,我必须创建一个新的转换器类,例如
public class MMyyyyWithSlashesConverter: CustomDateConverter
{
public MMyyyyWithSlashesConverter() : base("MM/yyyy")
{
}
}
这导致了一些非常丑陋和重复的代码。我宁愿能够做类似的事情
[ParseDateAs("d/MM/yyyy")]
public DateTime SomeDate { get; set; }
[ParseDateAs("MM/yyyy")]
public DateTime AnotherDate { get; set; }
[ParseDateAs("yyyyMM")]
public DateTime LessAnnoyingDate{ get; set; }
我能想到的唯一方法是修改 JSON.net 源以将属性参数传递给 JsonConverter 上的 ReadJson 函数,如果没有不涉及我修改源的解决方案,我会这样做。