The DateOnly
and TimeOnly
转换器将发布.NET 7 https://github.com/dotnet/runtime/issues/53539#issuecomment-1127634234.
现在你可以创建一个看起来像这样的自定义的(对于System.Text.Json
, for Json.NET
- see this https://stackoverflow.com/a/71021730/2501279回答):
public class DateOnlyJsonConverter : JsonConverter<DateOnly>
{
private const string Format = "yyyy-MM-dd";
public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return DateOnly.ParseExact(reader.GetString(), Format, CultureInfo.InvariantCulture);
}
public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString(Format, CultureInfo.InvariantCulture));
}
}
可能的用法之一是:
class DateOnlyHolder
{
// or via attribute [JsonConverter(typeof(DateOnlyJsonConverter))]
public DateOnly dt { get; set; }
}
var jsonSerializerOptions = new JsonSerializerOptions
{
Converters = { new DateOnlyJsonConverter() }
};
var serialized = JsonSerializer.Serialize(new DateOnlyHolder{dt = new DateOnly(2022,1,2)}, jsonSerializerOptions);
Console.WriteLine(serialized); // prints {"dt":"2022-01-02"}
var de = JsonSerializer.Deserialize<DateOnlyHolder>(serialized, jsonSerializerOptions);
Console.WriteLine(de.dt); // prints 1/2/2022