如何使用 System.Text.Json.JsonSerializer 将 TimeSpan 序列化为"HH:mm:ss"



我需要序列化一个具有TimeSpan属性的对象,并且我需要将该属性序列化为"HH:mm:ss";。相反,我得到了以下内容:

{"Ticks":561342005619,"Days":0,"Hours":15,"Milliseconds":200,"Minutes":35,"Seconds":34,"TotalDays":0.6497013953923612,"TotalHours":15.592833489416666,"TotalMilliseconds":56134200.5619,"TotalMinutes":935.570009365,"TotalSeconds":56134.2005619}

有办法做到这一点吗?

您可以定义自己的转换器,如中"如何为JSON序列化(编组(编写自定义转换器"中所述。NET。你的转换器可能看起来像这样:

public class TimeSpanJsonConverter : JsonConverter<TimeSpan>
{
public override TimeSpan Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return TimeSpan.ParseExact(reader.GetString() ?? "", @"hh:mm:ss", CultureInfo.InvariantCulture);
}
public override void Write(Utf8JsonWriter writer, TimeSpan timeSpanValue, JsonSerializerOptions options)
{
writer.WriteStringValue(timeSpanValue.ToString(@"hh:mm:ss"));
}
}

然后它可以用于序列化和反序列化:

JsonSerializerOptions serializeOptions = new JsonSerializerOptions
{
Converters =
{
new TimeSpanJsonConverter()
}
};
string serializedString = JsonSerializer.Serialize(
objectToSerialize, serializeOptions);
MyObject? deserializedObject = JsonSerializer.Deserialize<MyObject>(
serializedString, serializeOptions);

最新更新