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);