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.