2016-04-14 5 views
0

Ich weiß, wie TimeStamp innerhalb der Methoden in Date konvertiert wird, aber ich möchte etwas in meiner Eigenschaft implementieren, um den TimeStamp des zuletzt aktualisierten Dokuments in DocumentDb zu konvertieren. Etwas wie unten--TimeStamp zu Datum auf Eigenschaft in DocumentDb konvertieren

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

Bitte geben Sie keine Methoden in den Code implementieren. Ich brauche etwas, um in Eigenschaft selbst umzuwandeln.

Antwort

0

DocumentDb speichert den Timestamp-Wert im Unix-Timestamp-Format (die Anzahl der Sekunden seit dem 1. Januar 1970, 00:00 UTC). Sie müssen also einen eigenen Konverter schreiben, um Ihre Eigenschaften zu dekorieren. Hier ein Beispiel:

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

Beachten Sie, dass dieser Code nur auf 4.6 .NET arbeiten - um früheren Frameworks zum Ziel, sollten Sie die Konvertierung selbst vornehmen.