我知道如何使用注释来验证特定格式的DateTime。 我知道如何验证DateTime的集合(确保它们都有效)。
我找不到如何验证输入的json中集合中所有DateTimes是否具有特定格式的信息。
我需要验证在IList
的{{1}}中,所有日期都与格式DateTime
相匹配。
我尝试了使用重写的"yyyy-MM-dd"
函数的自定义类属性。
不起作用,因为我收到的对象已经是IsValid
,且DateTimes已为输入的json字符串转换。
json输入Enumerable<DateTime>
无效,但是当我检查格式是否正确时(在IsValid中),"DatesList": ["2012-10-01", "2012-10"]
已转换为日期值为"2012-10"
的DateTime。功能)。
当我需要使用我的可重用属性来检查json中所有输入的日期是否有效时,这是json反序列化的目标类。
2012-10-01
然后我尝试使用属性函数:
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace XXX
{
/// <summary>
/// Handles a Forex Rate and its history
/// </summary>
public class FxRate : IExamplesProvider
{
/// <summary>
/// Base currency of the Forex Rate
/// </summary>
[Required]
[RegularExpression("^[a-zA-Z]{3}$", ErrorMessage = "bla")]
public string BaseCurrency { get; set; }
/// <summary>
/// Target currency of the Forex Rate
/// </summary>
[Required]
[RegularExpression("^[a-zA-Z]{3}$", ErrorMessage = "bla")]
public string TargetCurrency { get; set; }
/// <summary>
/// List of dates
/// </summary>
[Required]
[EnsureValidHistoryDates]
public IList<DateTime> Dates { get; set; }
}
}
任何一种使用属性注释来验证T上具有特定格式的类型的集合的通用方法都将非常受欢迎,因为我被困在这里(并且我在Google上尝试了很多不同的搜索方式)。
答案 0 :(得分:1)
List<DateTime> validDates = new List<DateTime>();
List<DateTime> invalidDates = new List<DateTime>();
List<string> dateTimes = new List<string>() {
"20181227",
"2018-12-27",
"27/12/2018",
"12/27/2018"
}; //INSTEAD OF DECLARING THE DATES, THERE SHOULD BE THE CONVERSION FROM JSON TO STRINGS LIST
foreach(string dateTime in dateTimes)
{
bool isValid = DateTime.TryParseExact(dateTime, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime result);
if (isValid)
{
validDates.Add(result);
}
else
{
invalidDates.Add(result);
}
}