我们如何强制传递到以下方法的DateTime
采用特定格式:yyyyMMddHHmmssnnn
?
[FunctionName("OnGenerateBossNameHttpTriggered")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "OnGenerateBossNameHttpTriggered")] HttpRequest req,
ILogger log)
{
var requestBody = await new StreamReader(req.Body).ReadToEndAsync();
var data = JsonConvert.DeserializeObject<BossFileNameComponents>(requestBody);
return new OkObjectResult(FileNameGenerator.Generate(data));
}
我接受的数据模型的定义是这样的:
public class BossFileNameComponents
{
public string PracticeCode { get; set; }
public string SourceSystem { get; set; }
public string PatientLastName { get; set; }
public string PatientFirstName { get; set; }
public string DateOfService { get; set; }
public string PatientIdentifier { get; set; }
public string EncounterIdentifier { get; set; }
public string Extension { get; set; }
public DateTime TieBreaker { get; set; }
}
我们如何验证使用者提供的TieBreaker
是否采用特定格式:yyyyMMddHHmmssnnn?
首先,DateTime 是一个二进制值。它没有格式。仅当字符串解析为 DateTime 或从 DateTime 值生成字符串时,格式才适用。
JSON 没有标准的日期表示形式,但事实上的标准是ISO8601,即 yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK
。这就是 JSON.NET 默认理解和生成的。
不过这只是默认设置。正如 JSON 中的序列化日期所解释的那样,可以通过将带有自定义 DateFormatString 的 JsonSerializerSettings 类传递给反序列化对象来更改格式:
var settings=new JsonSerializerSettings
{
DateFormatString="yyyyMMddHHmmssnnn"
};
var data=JsonConvert.DeserializeObject<BossFileNameComponents>(requestBody,settings);
自定义 JsonConverter,请参阅 https://www.newtonsoft.com/json/help/html/CustomJsonConverter.htm。