我知道如何在方法中将TimeStamp转换为Date,但我想在我的属性上实现一些东西来转换DocumentDb中最后更新文档的TimeStamp。像下面的东西 -
[JsonProperty(PropertyName ="_ts")]
/* What to insert here -- [JsonConverter(typeof(???))] */
public string TimeStamp { get; set; }
请不要在代码中提供实施方法。我需要一些东西来转换属性本身。
答案 0 :(得分:0)
DocumentDb以Unix时间戳格式(自1970年1月1日,00:00 UTC以来的秒数)存储Timestamp值,因此您需要编写自己的转换器来装饰您的属性。这是一个例子:
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 - 为了定位早期的框架,您应该自己进行转换。