我试图将一个Unix时间戳
反序列化为DateTime
。在我的情况下,我需要在从时间戳设置属性为DateTime之前进行更多的检查。如果我使用来自Newtonsoft.Json
的DateTime
进行反序列化,它会将其反序列化为UTC
时间,而我需要将其反序列化为特定时区。
问题是我无法获得正确的时间。似乎我的字符串转换为long
失败了。如果我可以获取long
Unix时间戳,我可以让剩余的逻辑工作起来。
我有一个名为Alert
的类。
class Alert
{
// Some properties
[JsonConverter(typeof(UnixTimestampJsonConverter))]
public DateTime Created { get; set; }
// Some more properties
}
UnixTimestampJsonConverter
类是什么?
class UnixTimestampJsonConverter : JsonConverter
{
// Other override methods
public override object ReadJson (JsonReader reader, Type objectType,
object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.EndObject)
return null;
if (reader.TokenType == JsonToken.StartObject) {
long instance = serializer.Deserialize<long> (reader);
return TimeUtils.GetCustomDateTime (instance);
}
return null;
}
}
TimeUtils.GetCustomDateTime(instance)
将长整型的unix时间戳转换为特定时区的DateTime对象。我在一个PCL库中,使用的是Profile 78
,所以对于System.TimeZoneInfo
的访问有限,我正在使用NodaTime
的PCL版本进行其他时区计算。如果有人感兴趣,这是Github上的项目- MBTA Sharp。
Deserialize
行之前添加一个reader.Read();
吗?我认为你正在尝试反序列化StartObject令牌,因为你没有推进阅读器。 - Joachim Isakssonreader.Read()
,我是否仍然应该寻找StartObject
或者应该寻找JsonToken.string
? - Manish Sinhareader.Value
并将其转换为long
,然后继续进行? - Manish Sinha