Utilisation JSON.NET pour parser json date de format de Date(epochTime-offset)

Je suis en utilisant Json.net 7.0.1 en C# pour consommer une API rest. Le problème, c'est avec la date format de l'API utilise dans sa réponse JSON. Il ressemble à ceci:

/Date(1445301615000-0700)/

Qui est censé représenter une heure UTC 2015-10-19 17:40:15

Si vous branchez 1445301615000 dans un époque convertisseur, vous voyez que c'est 2015-10-20 00:40:15 . Il est 7 heures d'avance sur l'heure UTC. Ensuite, ils comprennent la -0700 sans doute pour compenser ce retour à l'UTC. Alors, dans un effort pour me donner une heure UTC, ils sont à m'envoyer UTC+7-0700. Pourquoi ils le font de cette façon je n'ai aucune idée, mais je ne peux pas changer cela.

Ma question est la meilleure façon de faire Json.NET analyser cette chaîne de date et DateTime de 2015-10-19 17:40:15 UTC. Je peux écrire une coutume JsonConverter de s'emparer de la valeur et de manipuler manuellement, mais je me demandais si il n'y a plus de méthode native.

J'ai essayé de changer le JsonSerializerSettings DateTimeZoneHandling propriété à toutes ses différentes valeurs. Réglage de l'heure Utc ignore simplement le décalage de fuseau horaire, produisant 2015-10-20 00:40:15. Le paramètre Local, non spécifié, ou RoundtripKind tous rendement 2015-10-19 20:40:15, je crois que c'est parce que mon fuseau horaire est UTC-4, de sorte qu'il est en train d'essayer d'appliquer l'ajustement de la principale valeur à la date de 2015-10-20 00:40.

J'ai aussi envisagé d'utiliser la DateFormatString propriété pour représenter la date prévue de la chaîne de format. Mais je ne pouvais pas trouver la bonne format de chaîne de caractères pour représenter cette epochtime offset format.

Voici un exemple simplifié:

Person person;
string json = @"{ 'Name': 'John', 
                  'LastSeen':'/Date(1445301615000-0700)/' }";   //1445301615000 = 2015-10-20 00:40:15

person = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine(person.LastSeen);     //10/19/2015 8:40:15 PM    Kind = Local

person = JsonConvert.DeserializeObject<Person>(json, new JsonSerializerSettings { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat });
Console.WriteLine(person.LastSeen);     //10/19/2015 8:40:15 PM    Kind = Local

person = JsonConvert.DeserializeObject<Person>(json, new JsonSerializerSettings { DateTimeZoneHandling = DateTimeZoneHandling.Utc });
Console.WriteLine(person.LastSeen);     //10/20/2015 00:40:15 PM    Kind = Utc

//In all three, the -0700 portion is being ignored. I'd like person.LastSeen to be 10/19/2015 17:40:15.

De nouveau, je pourrais juste savoir que l'API va me donner UTC+7 et de faire le réglage de moi-même pour obtenir la vraie UTC. Mais je me demandais si Json.NET a natif façon de gérer ce type de chaîne de date.

Avez-vous lu newtonsoft.com/json/help/html/DatesInJSON.htm ?
J'ai, en effet, et beaucoup de l'entourage de la documentation. J'ai trouvé beaucoup de choses au sujet de l'analyse d'une normal "Microsoft Format" date string Date(1445301615000), mais rien à propos de ce format particulier avec la -0700 décalage ajouté.

OriginalL'auteur Benjamin | 2015-10-19