2016-04-14 6 views
0

私はメソッド内でDateStampをDateに変換する方法を知っていますが、DocumentDbで最後に更新されたドキュメントのTimeStampを変換するためにプロパティに何かを実装します。下記のようなもの -DocumentDbのプロパティ自体でタイムスタンプを変換する

[JsonProperty(PropertyName ="_ts")] 
    /* What to insert here -- [JsonConverter(typeof(???))]  */     
    public string TimeStamp { get; set; } 

コードに実装する方法を教えてください。私は財産そのものに変換するものが必要です。

答えて

0

DocumentDbは、Unixタイムスタンプ形式(1970年1月1日00:00 UTCからの秒数)でタイムスタンプ値を保存するため、プロパティを装飾する独自のコンバータを作成する必要があります。次に例を示します。

using System; 
using Newtonsoft.Json; 

namespace Converters 
{ 
    public class UnixDateTimeConverter : JsonConverter 
    { 
     public override void WriteJson(JsonWriter writer, 
      object value, JsonSerializer serializer) 
     { 
      long seconds; 
      if (value is DateTime) 
      { 
       var dt = (DateTime)value; 
       seconds = !dt.Equals(DateTime.MinValue) ? 
        new DateTimeOffset(dt).ToUnixTimeSeconds() : long.MinValue; 
      } 
      else 
      { 
       throw new Exception("Expected date object value."); 
      } 

      writer.WriteValue(seconds); 
     } 

     public override object ReadJson(JsonReader reader, Type objectType, 
      object existingValue, JsonSerializer serializer) 
     { 
      if (reader.TokenType == JsonToken.None || reader.TokenType == JsonToken.Null) 
       return null; 

      if (reader.TokenType != JsonToken.Integer) 
      { 
       throw new Exception(
        $"Unexpected token parsing date. Expected Integer, got {reader.TokenType}."); 
      } 

      var seconds = (long)reader.Value; 
      return DateTimeOffset.FromUnixTimeSeconds(seconds).DateTime; 
     } 

     public override bool CanConvert(Type objectType) 
     { 
      return objectType == typeof(DateTime) || objectType == typeof(DateTime?); 
     } 
    } 
} 

ベアは心の中でこのコードは唯一の.NET 4.6で動作すること - それ以前のフレームワークを標的とするために、あなたは、変換を自分で行う必要があります。

関連する問題