dst*_*stj 5 c# json.net .net-core
使用 .NET Core 和 Json.NET,我如何序列化一个DateTimeOffset(not DateTime) 以便 UTC+00:00成为Z同时保持任何其他时区偏移(-04:00例如)?
这SO职位是DateTime的,但有了它,我设法取代+00:00的Z,而转换所有时区为UTC
new JsonSerializerSettings {
Converters = new JsonConverter[] {
new IsoDateTimeConverter {
DateTimeStyles = DateTimeStyles.AdjustToUniversal,
DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'",
}
}
};
Run Code Online (Sandbox Code Playgroud)
我想保留时区偏移信息,即
2019-12-10T17:00:00Z 为了 new DateTimeOffset(2019, 12, 10, 17, 0, 0, TimeSpan.Zero)
和
2019-12-10T13:00:00-04:00 为了 new DateTimeOffset(2019, 12, 10, 13, 0, 0, TimeSpan.FromHours(-4))
该DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssK"建议的作品DateTime,但产出+00:00,不Z为DateTimeOffset...
请参阅此 .NET Fiddle 以复制我的尝试。
您可以子类化IsoDateTimeConverter并重写CanConvert以仅转换类型为DateTimeOffset和的对象DateTimeOffset?。然后,当DateTimeOffset.Offset为零时,以通用DateTime格式输出:
public class IsoDateTimeOffsetConverter : IsoDateTimeConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(DateTimeOffset) || objectType == typeof(DateTimeOffset?);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var dateTimeOffset = (DateTimeOffset)value;
if (dateTimeOffset.Offset == TimeSpan.Zero)
{
// If there is no offset, serialize as a DateTime
base.WriteJson(writer, dateTimeOffset.UtcDateTime, serializer);
}
else
{
base.WriteJson(writer, value, serializer);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
var settings = new JsonSerializerSettings {
Converters = {
new IsoDateTimeOffsetConverter(),
}
};
Run Code Online (Sandbox Code Playgroud)
演示小提琴在这里。
| 归档时间: |
|
| 查看次数: |
778 次 |
| 最近记录: |