Correction de la sérialisation JSON Date à partir d’une méthode Web .Net

Je travaille actuellement sur un projet dans lequel j’envoie un type .Net via ajax à une application cliente via ajax. Je n’ai aucun problème avec l’object en cours de sérialisation et défini sur le client.

Je rencontre des problèmes lorsque je prends exactement le même object et le publie sur le serveur via une méthode Web avec l’erreur suivante: /Date(1373950800000)/ is not a valid value for DateTime. Ce qui est assez énervant, c’est comme ça que Microsoft me l’a donné, mais c’est tout.

Quelqu’un at-il une solution rapide pour cela? Je veux une manière transparente de le faire sans devoir modifier l’object avant de le renvoyer à partir de l’appel ajax.

Votre problème concerne le sérialiseur JavaScript côté serveur que vous utilisez. JsonDataContractSerializer (sérialiseur par défaut pour ASP.NET MVC) ou NewtonSoft Json Serializer (sérialiseur par défaut pour ASP.NET Web API).

Pour obtenir un exemple visuel de ce problème de date ainsi que des solutions possibles, consultez JSON Les dates sont différentes dans ASP.NET MVC et Web API .

Traitez le DateFormat pendant que le code suivant résoudra votre problème

  JsonConvert.SerializeObject(yourobject, Formatting.Indented, new JsonSerializerSettings { DateFormatHandling = DateFormatHandling.IsoDateFormat }); 

Il en résultera les dates au format 2009-02-15T00: 00: 00Z

Celui-ci vous aidera avec l’erreur: cliquez-moi

 var yourDateTimeObject = ... var converter = new IsoDateTimeConverter(); ssortingng isoDateTime = Newtonsoft.Json.JsonConvert.SerializeObject(yourDateTimeObject, converter); 

C’est la méthode que j’utilise pour ces choses:

D’abord, vous devez nettoyer les fichiers indésirables du paramètre de date.

 Ssortingng unixDate = "/Date(1373950800000)/"; unixDate = unixDate.Replace("/Date(","").Replace(")/", ""); 

Maintenant, comme .NET et unix mesurent le temps différemment, vous devez compenser cela en créant une date fixée au 1er janvier 1970, puis en ajoutant la partie numérique de la date que vous avez passée.

 DateTime dotNetDate = new DateTime(1970, 1, 1); dotNetDate = dotNetDate.AddMilliseconds(Convert.ToInt64(unixDate) 

Vous devez également noter qu’il y aura une perte de précision ici – les dates .NET sont à la nanoseconde la plus proche, tandis que les dates unix sont à la milliseconde près.

Essayez d’envoyer les dates avec les barres obliques échappées. J’ai un client iPad qui publie du JSON sur une méthode de service ASP.NET WebAPI et nous devons envoyer les dates de cette façon:

"due": "\/Date(1335830400000)\/"