是否可以指定自定义格式TimeSpan
序列化?
使用Newtonsoft.Json
.
我想要格式为 HH:mm 的序列化字符串,例如:
TimeSpan.FromHours(5)
-> //“+05:00”
TimeSpan.FromHours(-5)
-> //“-05:00”
Thanks!
这是一个可以添加到项目中的 TimeSpan 转换器:
using System;
using Newtonsoft.Json;
namespace JsonTools
{
/// <summary>
/// TimeSpans are not serialized consistently depending on what properties are present. So this
/// serializer will ensure the format is maintained no matter what.
/// </summary>
public class TimespanConverter : JsonConverter<TimeSpan>
{
/// <summary>
/// Format: Days.Hours:Minutes:Seconds:Milliseconds
/// </summary>
public const string TimeSpanFormatString = @"d\.hh\:mm\:ss\:FFF";
public override void WriteJson(JsonWriter writer, TimeSpan value, JsonSerializer serializer)
{
var timespanFormatted = $"{value.ToString(TimeSpanFormatString)}";
writer.WriteValue(timespanFormatted);
}
public override TimeSpan ReadJson(JsonReader reader, Type objectType, TimeSpan existingValue, bool hasExistingValue, JsonSerializer serializer)
{
TimeSpan parsedTimeSpan;
TimeSpan.TryParseExact((string)reader.Value, TimeSpanFormatString, null, out parsedTimeSpan);
return parsedTimeSpan;
}
}
}
它可以这样使用:
public class Schedule
{
[JsonConverter(typeof(TimespanConverter))]
[JsonProperty(TypeNameHandling = TypeNameHandling.All)]
public TimeSpan Delay { get; set; }
}
Notes:
TimeSpan 序列化格式参考
我发现在使用 Newtonsoft 生成架构时,我必须包含 TypeNameHandling 属性,否则 TimeSpan 类型名称未在生成的架构中正确序列化。这对于此处的目的来说不是必需的,但无论如何我都将其包括在内。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)