NSwag-在自动生成的DTO中使用字符串属性的日期格式



我正在使用NSwag生成DTO。在yaml中,我指定了一个日期格式如下的属性:

User:
type: object
additionalProperties: false
properties:
createdAt:
type: string
format: date

这会生成C#:

[System.Text.Json.Serialization.JsonPropertyName("createdAt")]
[System.Text.Json.Serialization.JsonConverter(typeof(DateFormatConverter))]
public System.DateTimeOffset CreatedAt { get; set; } = default!;

使用新生成的DateFormatConverter:类

[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")]
internal class DateFormatConverter : System.Text.Json.Serialization.JsonConverter<System.DateTime>
{
public override System.DateTime Read(ref System.Text.Json.Utf8JsonReader reader, System.Type typeToConvert, System.Text.Json.JsonSerializerOptions options)
{
var dateTime = reader.GetString();
if (dateTime == null)
{
throw new JsonException("Unexpected JsonTokenType.Null");
}
return System.DateTime.Parse(dateTime);
}
public override void Write(System.Text.Json.Utf8JsonWriter writer, System.DateTime value, System.Text.Json.JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString("yyyy-MM-dd"));
}
}

但是,JsonException抛出一个not found错误,通过添加using System.Text.Json语句可以解决该错误。不过,当重新生成文件时,它会在生成时被删除。

有没有更好的方法来实现date格式?我可以在配置中的某个位置添加using语句吗?

感谢

我使用了date,但本应使用date-time

createdAt:
type: string
format: date-time

这应该创建:

[System.Text.Json.Serialization.JsonPropertyName("createdAt")]
public System.DateTimeOffset CreatedAt { get; set; } = default!;

不需要转换器!

最新更新