![](/img/trans.png)
[英]Authorize attribute not working with IdentityServer4 and .NET Core 3.1
[英]Date Only Attribute in .NET Core 3.1
我正在将 C# API 从 .NET Framework 迁移到 .NET Core 3.1。
我要求某些字段仅返回yyyyMMdd
(无时间),而其他字段将返回完整的 DateTime 值(日期和时间)。
在旧的 .NET Framework 世界中,我们可以制作一个像这样的快速转换器:
public class OnlyDateConverter : IsoDateTimeConverter
{
public OnlyDateConverter()
{
DateTimeFormat = "yyyyMMdd";
}
}
并在我的模型中使用它
[JsonConverter(typeof(DateTimeConverter))]
public DateTime OrderDate { get; set; }
这在 .NET Core 3.1 中不起作用。
当我通过 Swagger 调用它时,返回的 JSON 是:
"OrderDate": "2002-05-22T00:00:00"
我知道您可以在Startup.cs
添加JsonSerializerOption
,但这将强制所有日期使用相同的格式。 我需要挑挑拣拣。
我试过了:
[DataType(DataType.Date)]
[JsonConverter(typeof(DateTimeConverter))]
我已经花了一整天的时间。 我希望有人做到了这一点,并能指出我的愚蠢错误。
这段代码对我有用
在您的输出模型中添加:
[DataType(DataType.Date)]
[JsonConverter(typeof(JsonDateConverterExtension))]
public DateTime? DateOfBirth { get; set; }
其中 JsonDateConverterExtension 是:
public class JsonDateConverterExtension : JsonConverter<DateTime?>
{
public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
=> DateTime.ParseExact(reader.GetString(),
"yyyy-MM-dd", CultureInfo.InvariantCulture);
public override void Write(Utf8JsonWriter writer, DateTime? value, JsonSerializerOptions options)
=> writer.WriteStringValue(value?.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.