NewtonSoft.Json自定义JsonConverter反序列化为DateTime不起作用

曼尼什·辛哈(Manish Sinha)

我想反序列化Unix timestampDateTime就我而言,我需要做更多的检查,然后才能从时间戳记中将属性设置为DateTime。如果我使用DateTimeNewtonsoft.Json是它反序列化到UTC时间,我需要将其反序列化到一个特定的时区

问题是我无法获得正确的时间。似乎我的long解析字符串失败。如果我可以获得longUnix时间戳,那么其余的逻辑都可以工作

我有一堂课 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; } 
    }
}

示例: https //dotnetfiddle.net/Fa8Zis

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章