How to deserialize date (milliseconds) with JSON.NET?

.net, c#, json.net

Solution

You can create a custom DateTime converter

var token = JsonConvert.DeserializeObject<TokenResponse>(response.Content, 
                                                      new MyDateTimeConverter());
public class MyDateTimeConverter : Newtonsoft.Json.JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(DateTime);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var t = long.Parse((string)reader.Value);
        return new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(t);
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

Problem

I'm working with a response like the following: ``` {"id":"https://login.salesforce.com/id/00Dx0000000BV7z/005x00000012Q9P", "issued_at":"1278448832702","instance_url":"https://na1.salesforce.com", "signature":"0CmxinZir53Yex7nE0TD+zMpvIWYGb/bdJh6XfOH6EQ=","access_token": "00Dx0000000BV7z!AR8AQAxo9UfVkh8AlV0Gomt9Czx9LjHnSSpwBMmbRcgKFmxOtvxjTrKW1 9ye6PE3Ds1eQz3z8jr3W7_VbWmEu4Q8TVGSTHxs"} ``` I'm trying to deserialize this into a class that looks like: ``` public class TokenResponse { public string Id { get; set; } [JsonProperty(PropertyName = "issued_at")] public DateTime IssuedAt { get; set; } public string Signature { get; set; } [JsonProperty(PropertyName = "instance_url")] public string InstanceUrl { get; set; } [JsonProperty(PropertyName = "access_token")] public string AccessToken { get; set; } } ``` The call to deserialize is pretty simple: ``` JsonConvert.DeserializeObject<TokenResponse>(response.Content); ``` This results in an exception: `Could not convert string to DateTime: 1278448832702.` Is there a way I can get JSON.NET to deserialize this date correctly?

Original source