我正在使用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!;
不需要转换器!