【问题标题】:Date Only Attribute in .NET Core 3.1.NET Core 3.1 中的仅日期属性
【发布时间】:2020-03-04 21:06:07
【问题描述】:

我正在将 C# API 从 .NET Framework 迁移到 .NET Core 3.1。

我要求某些字段仅返回yyyyMMdd(没时间) 以及其他将返回完整日期时间值(日期和时间)的字段。

在旧的 .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))]

我花了一整天的时间。我希望有人这样做并能指出我的愚蠢错误。

【问题讨论】:

    标签: c# date datetime json.net .net-core-3.1


    【解决方案1】:

    这段代码对我有用

    在你的输出模型中添加这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 2021-02-01
      • 2020-12-03
      • 1970-01-01
      • 2021-06-01
      相关资源
      最近更新 更多