繁体   English   中英

.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 ,但这将强制所有日期使用相同的格式。 我需要挑挑拣拣。

我试过了:

  • 制作多个 json 转换器,但它们永远不会被调用/工作
  • [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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM