如何确保有效载荷采用特定格式?

时间:2019-02-13 17:10:35

标签: c# asp.net-core .net-core json.net azure-functions

我们如何强制传递到以下方法中的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?

2 个答案:

答案 0 :(得分:2)

首先,DateTime是一个二进制值。没有格式。格式仅在将字符串解析为DateTime或从DateTime值生成字符串时适用。

JSON没有标准的日期表示形式,但事实上的标准是ISO8601,即yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK。这就是JSON.NET能够默认理解和产生的内容。

但这只是默认设置。如Serializing Dates in JSON所述,可以通过将带有自定义JsonSerializerSettingsDateFormatString类传递给DeserializeObject来更改格式:

var settings=new JsonSerializerSettings 
             {
                  DateFormatString="yyyyMMddHHmmssnnn"
             };
var data=JsonConvert.DeserializeObject<BossFileNameComponents>(requestBody,settings);

答案 1 :(得分:1)

您可以使用自定义JsonConverter,请参见https://www.newtonsoft.com/json/help/html/CustomJsonConverter.htm