我想反序列化Unix timestamp
到DateTime
。就我而言,我需要做更多的检查,然后才能从时间戳记中将属性设置为DateTime。如果我使用DateTime
的Newtonsoft.Json
是它反序列化到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;
}
}
whereTimeUtils.GetCustomDateTime (instance)
将长的unixtimestamp转换为特定时区的DateTime对象。
我在的PCL库中Profile 78
,因此我的访问权限受到限制,System.TimeZoneInfo
并且我将PCL版本NodaTime
用于其他时区计算。
如果有人感兴趣,这是Github上的项目-MBTA Sharp
我很确定您需要做的就是打电话serializer.Deserialize
。这样做可以使阅读器正确前进,并且您无需执行其他任何操作:
public class UnixTimestampJsonConverter : JsonConverter
{
public override object ReadJson(
JsonReader reader,
Type objectType,
object existingValue,
JsonSerializer serializer)
{
long ts = serializer.Deserialize<long>(reader);
return TimeUtils.GetMbtaDateTime(ts);
}
public override bool CanConvert(Type type)
{
return typeof(DateTime).IsAssignableFrom(type);
}
public override void WriteJson(
JsonWriter writer,
object value,
JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanRead
{
get { return true; }
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句