C# 如何确保有效负载为特定格式?

C# 如何确保有效负载为特定格式?,c#,asp.net-core,.net-core,json.net,azure-functions,C#,Asp.net Core,.net Core,Json.net,Azure Functions,我们如何强制传递给下面方法的DateTime采用特定格式:yyyymmddhhmmssnn [函数名(“OnGenerateBossNameHttpTriggered”)] 公共静态异步任务运行( [HttpTrigger(AuthorizationLevel.Function,“get”,“post”,Route=“OnGenerateBossNameHttpTrigger”)]HttpRequest请求, ILogger日志) { var requestBody=等待新的StreamRead

我们如何强制传递给下面方法的
DateTime
采用特定格式:
yyyymmddhhmmssnn

[函数名(“OnGenerateBossNameHttpTriggered”)]
公共静态异步任务运行(
[HttpTrigger(AuthorizationLevel.Function,“get”,“post”,Route=“OnGenerateBossNameHttpTrigger”)]HttpRequest请求,
ILogger日志)
{
var requestBody=等待新的StreamReader(req.Body).ReadToEndAsync();
var data=JsonConvert.DeserializeObject(requestBody);
返回新的OkObjectResult(FileNameGenerator.Generate(data));
}
我接受的数据模型定义如下:

公共类BossFileNameComponents
{
公共字符串PracticeCode{get;set;}
公共字符串源系统{get;set;}
公共字符串PatientLastName{get;set;}
公共字符串PatientFirstName{get;set;}
公共字符串DateOfService{get;set;}
公共字符串PatientIdentifier{get;set;}
公共字符串遇到标识符{get;set;}
公共字符串扩展名{get;set;}
公共日期时间分接器{get;set;}
}

我们如何验证消费者提供的
TieBreaker
是否采用特定格式:
yyymmddhhmmssnn?
您可以使用自定义JsonConverter,请参阅。

您可以使用自定义JsonConverter,请参阅。

首先,日期时间是一个二进制值。它没有格式。仅当字符串被解析为DateTime或从DateTime值生成字符串时,格式才适用

JSON没有标准的日期表示法,但实际上的标准是ISO8601,即
yyyy'-'MM'-'dd'T'HH':'MM':'ss.fffffff k
。这就是JSON.NET默认理解和生成的内容

不过这只是默认设置。如前所述,可以通过将带有自定义的类传递给以下对象来更改格式:

var设置=新的JsonSerializerSettings
{
DateFormatString=“yyyymmddhhmmssnn”
};
var data=JsonConvert.DeserializeObject(requestBody,设置);

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

JSON没有标准的日期表示法,但实际上的标准是ISO8601,即
yyyy'-'MM'-'dd'T'HH':'MM':'ss.fffffff k
。这就是JSON.NET默认理解和生成的内容

不过这只是默认设置。如前所述,可以通过将带有自定义的类传递给以下对象来更改格式:

var设置=新的JsonSerializerSettings
{
DateFormatString=“yyyymmddhhmmssnn”
};
var data=JsonConvert.DeserializeObject(requestBody,设置);

反序列化后,您可以检查TieBraker是否是有效的DateTime,如果他发送了无效的DateTime,TieBraker将是Date Min值
DateTime
是二进制值,它没有格式。事实上,JSON标准是ISO8601,而不是您在这里发布的标准。您必须在JSON.NET中使用自定义日期格式来生成所需内容。@PanagiotisKanavos您指的是这一行:
var data=JsonConvert.DeserializeObject(requestBody)在哪里我可以使用自定义序列化来获取正确格式的日期时间?如果是这样,我的模型将该字段定义为日期时间是否不正确
public DateTime TieBreaker{get;set;}
所需的格式不正确。事实标准是ISO8601,即
yyyy-MM-ddTHH:MM:ss……
。您仍然可以使用@PanagiotisKanavos中所述的Json序列化设置指定自定义格式。非常规格式的原因是
yyyy-MM-ddTHH:MM:ss
必须是文件名的一部分,并且必须没有特殊字符反序列化后,您可以检查分片器是否是有效的日期时间,如果发送的日期时间无效,则TieBraker将为Date Min值
DateTime
为二进制值,没有格式。事实上,JSON标准是ISO8601,而不是您在这里发布的标准。您必须在JSON.NET中使用自定义日期格式来生成所需内容。@PanagiotisKanavos您指的是这一行:
var data=JsonConvert.DeserializeObject(requestBody)在哪里我可以使用自定义序列化来获取正确格式的日期时间?如果是这样,我的模型将该字段定义为日期时间是否不正确
public DateTime TieBreaker{get;set;}
所需的格式不正确。事实标准是ISO8601,即
yyyy-MM-ddTHH:MM:ss……
。您仍然可以使用@PanagiotisKanavos中所述的Json序列化设置指定自定义格式非常规格式的原因是
yyyy-MM-ddTHH:MM:ss
必须是文件名的一部分,并且必须没有特殊字符扫描您给出了一个示例吗?不需要使用custon JsonConverter,只是一个自定义日期格式字符串。@l--“l”---“l”--“你为什么要首先使用这种非常规格式?”PanagiotisKanavos你能举例说明自定义日期格式字符串而不是jsonconverter是什么意思吗?你能举个例子吗?没有必要使用custon jsonconverter,只是一个自定义日期格式字符串。@l------“为什么您首先要使用这种非常规格式?”PanagiotisKanavos您能举例说明自定义日期格式字符串而不是jsonconverter是什么意思吗?
var settings=new JsonSerializerSettings 
             {
                  DateFormatString="yyyyMMddHHmmssnnn"
             };
var data=JsonConvert.DeserializeObject<BossFileNameComponents>(requestBody,settings);