簡體   English   中英

NewtonSoft.Json自定義JsonConverter反序列化為DateTime不起作用

[英]NewtonSoft.Json custom JsonConverter deserialize to DateTime not working

我試圖將Unix timestamp反序列化為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)獲取長unixtimestamp並將其轉換為特定時區的DateTime對象。

我在Profile 78的PCL庫中,所以我對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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM