Укажите формат Epoch TimeDate при сериализации / десериализации с помощью Utf8Json - PullRequest
0 голосов
/ 20 января 2020

Я не смог найти достаточно информации о том, как обрабатывать DateTimeOffset и TimeSpan во время сериализации и десериализации с помощью utf8 json. я мог бы найти информацию о IJsonFormatter, но не о том, как правильно его реализовать.

Мой пример Class выглядит следующим образом:

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; } 
}

У меня есть функция для преобразования Datetime в EpochTimeStamp из этого post: Как получить unix метку времени в C#

Я пытался добавить [JsonFormatter (typeof [CustomDateTimeConverter ())] к датчику BeginDate, но нужно его реализовать правильно ..

public class CustomDateTimeConverter : IJsonFormatter
{
    public CustomDateTimeConverter()
    {
       // convert DateTime to Unix Milliseconds for Serialzing
    }
}

Или я на неправильном пути? Как мне этого добиться?

Спасибо, что помогли!

1 Ответ

0 голосов
/ 23 января 2020

мое решение расширяет мой класс без использования IJsonFormatter. Класс теперь выглядит так:

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); }
  }

}
...