C# 使用Utf8Json序列化/反序列化时指定历元时间日期格式
在使用utf8json进行序列化和反序列化期间,我找不到关于如何处理DateTimeOffset和TimeSpan的足够信息。我可以找到关于IJsonFormatter的信息,但找不到如何正确实现它C# 使用Utf8Json序列化/反序列化时指定历元时间日期格式,c#,json,timestamp,unix-timestamp,C#,Json,Timestamp,Unix Timestamp,在使用utf8json进行序列化和反序列化期间,我找不到关于如何处理DateTimeOffset和TimeSpan的足够信息。我可以找到关于IJsonFormatter的信息,但找不到如何正确实现它 public class CustomDateTimeConverter : IJsonFormatter { public CustomDateTimeConverter() { // convert DateTime to Unix Milliseconds for
public class CustomDateTimeConverter : IJsonFormatter
{
public CustomDateTimeConverter()
{
// convert DateTime to Unix Milliseconds for Serialzing
}
}
我的示例类如下所示:
public MyClass()
{
// This should be converted during serializing/deserializing to Unix TimeStamp in Milliseconds
[JsonFormatter(typeof[CustomDateTimeConverter())]
public DateTimeOffSet? BeginDate { get; set; }
// This should be converted to TotalMilliseconds
public TimeSpan? Elapsed { get; set; }
}
public MyClass()
{
[IgnoreDataMember]
// This field will be used internally
public DateTimeOffSet? BeginDate { get; set; }
[DataMember(Name = "beginDate")]
// This will be used for serialzing/deserialising to Unix TimeStamp in Milliseconds
public long BeginDateEpoch
{
get { return ((DateTimeOffset)BeginDate.GetValueOrDefault()).ToUnixTimeMilliseconds(); }
set { BeginDate= new DateTimeOffset(DateTimeOffset.FromUnixTimeMilliseconds(value).DateTime.ToLocalTime()); }
}
[IgnoreDataMember]
public TimeSpan? Elapsed { get; set; }
[DataMember(Name = "elapsed")]
public double ElapsedEpoch
{
get { return Elapsed.GetValueOrDefault().TotalMilliseconds; }
set { Elapsed = TimeSpan.FromMilliseconds(value); }
}
}
我有一个将Datetime转换为本文中的EpochTimeStamp的函数:
我试图将[JsonFormatter(typeof[CustomDateTimeConverter())]添加到datamember BeginDate,但需要正确实现它
public class CustomDateTimeConverter : IJsonFormatter
{
public CustomDateTimeConverter()
{
// convert DateTime to Unix Milliseconds for Serialzing
}
}
或者我走错了路?我怎样才能做到这一点
谢谢您的帮助!我的解决方案在不使用IJsonFormatter的情况下扩展了我的类。 该类现在如下所示:
public MyClass()
{
// This should be converted during serializing/deserializing to Unix TimeStamp in Milliseconds
[JsonFormatter(typeof[CustomDateTimeConverter())]
public DateTimeOffSet? BeginDate { get; set; }
// This should be converted to TotalMilliseconds
public TimeSpan? Elapsed { get; set; }
}
public MyClass()
{
[IgnoreDataMember]
// This field will be used internally
public DateTimeOffSet? BeginDate { get; set; }
[DataMember(Name = "beginDate")]
// This will be used for serialzing/deserialising to Unix TimeStamp in Milliseconds
public long BeginDateEpoch
{
get { return ((DateTimeOffset)BeginDate.GetValueOrDefault()).ToUnixTimeMilliseconds(); }
set { BeginDate= new DateTimeOffset(DateTimeOffset.FromUnixTimeMilliseconds(value).DateTime.ToLocalTime()); }
}
[IgnoreDataMember]
public TimeSpan? Elapsed { get; set; }
[DataMember(Name = "elapsed")]
public double ElapsedEpoch
{
get { return Elapsed.GetValueOrDefault().TotalMilliseconds; }
set { Elapsed = TimeSpan.FromMilliseconds(value); }
}
}