[英]How to serialize DateOnly using refit.?
自 3-4 天以來,我一直在尋找這個,我幾乎得到了答案,但我仍然無法在我的代碼中實現。 實際上,通過查看文檔,我永遠無法理解或無法工作。 :/
而且我還需要另一個建議,我只使用日期,因為我需要實現從某個日期到某個日期的日期范圍過濾器,而且我不需要任何時間。 這是正確的方法還是我應該使用 DateTime。?
試試下面這個最小可重現的例子。 當您從接口創建Refit
實例時,可以傳遞一些選項,其中之一是可以附加自定義轉換器的ContentSerializer
屬性。
using Refit;
using System.Text.Json;
using System.Text.Json.Serialization;
var options = new JsonSerializerOptions();
options.Converters.Add(new DateOnlyConverter());
options.Converters.Add(new TimeOnlyConverter());
var postmanEchoApi = RestService.For<IPostmanEchoApi>("https://postman-echo.com", new RefitSettings
{
ContentSerializer = new SystemTextJsonContentSerializer(options)
});
var echo = await postmanEchoApi.Echo(new Args
{
dateOnly = DateOnly.FromDateTime(DateTime.Now),
timeOnly = TimeOnly.FromDateTime(DateTime.Now),
});
Console.WriteLine(echo.args.dateOnly);
Console.WriteLine(echo.args.timeOnly);
public class DateOnlyConverter : JsonConverter<DateOnly>
{
private readonly string serializationFormat;
public DateOnlyConverter() : this(null) { }
public DateOnlyConverter(string? serializationFormat)
{
this.serializationFormat = serializationFormat ?? "yyyy-MM-dd";
}
public override DateOnly Read(ref Utf8JsonReader reader,
Type typeToConvert, JsonSerializerOptions options)
{
var value = reader.GetString();
return DateOnly.FromDateTime(DateTime.Parse(value!));
}
public override void Write(Utf8JsonWriter writer, DateOnly value,
JsonSerializerOptions options)
=> writer.WriteStringValue(value.ToString(serializationFormat));
}
public class TimeOnlyConverter : JsonConverter<TimeOnly>
{
private readonly string serializationFormat;
public TimeOnlyConverter() : this(null) { }
public TimeOnlyConverter(string? serializationFormat)
{
this.serializationFormat = serializationFormat ?? "HH:mm:ss.fff";
}
public override TimeOnly Read(ref Utf8JsonReader reader,
Type typeToConvert, JsonSerializerOptions options)
{
var value = reader.GetString();
return TimeOnly.FromDateTime(DateTime.Parse(value!));
}
public override void Write(Utf8JsonWriter writer, TimeOnly value,
JsonSerializerOptions options)
=> writer.WriteStringValue(value.ToString(serializationFormat));
}
public class Args {
public DateOnly dateOnly { get; set; }
public TimeOnly timeOnly { get; set; }
}
public class Echo
{
public Args args { get; set; }
}
[Headers("user-agent: curl/7.79.1")]
public interface IPostmanEchoApi
{
[Get("/get")]
Task<Echo> Echo(Args queryParams);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.