web-dev-qa-db-fra.com

Comment passer une valeur de date JSON via ASP.NET MVC à l'aide de JSON.NET?

Duplicate possible:
Formater une date JSON Microsoft?

La fonction ASP.NET Json() formate et renvoie une date sous la forme

{"d":"\/Date(1240718400000)\/"}

qui doit être traitée du côté du client, ce qui est problématique. Quelles sont vos suggestions d’approches pour l’envoi de valeurs de date?

36
ChrisP

Cela a été trouvé dans un autre post sur Stack Overflow:

var date = new Date(parseInt(jsonDate.substr(6))); 

La fonction substr supprime la partie "/ Date (") et la fonction parseInt obtient le nombre entier et ignore le ") /" à la fin. Le nombre résultant est transmis au constructeur Date.

29
Jimbo

Si vous n'êtes pas lié au sérialiseur JSON MS, vous pouvez utiliser Json.NET . Il est livré avec IsoDateTimeConverter pour gérer les problèmes de sérialisation des dates. Cela sérialisera les dates dans une chaîne formatée ISO 8601

Par exemple, dans notre projet, la sérialisation myObject est gérée via le code suivant.

JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.Formatting = Formatting.Indented;
jsonNetResult.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
jsonNetResult.Data = myObject;

Si vous décidez de plonger dans Json.NET, vous voudrez également saisir JsonNetResult car il renvoie un ActionResult pouvant être utilisé dans une application ASP.NET MVC. C'est assez facile à utiliser.

Pour plus d'informations, voir: Good (Date) Times avec Json.NET

11
Ryan Taylor

C'est peut-être moche, mais ça marche:

 var Epoch = (new RegExp('/Date\\((-?[0-9]+)\\)/')).exec(d);
 $("#field").text((new Date(parseInt(Epoch[1]))).toDateString());

Probablement, il n'est pas nécessaire de faire correspondre la chaîne entière, et juste (-? [0-9] +) est suffisant ...

6
Felix

Tout le monde n’est pas d’accord avec moi pour dire que c’est une bonne idée, mais je me retrouve le plus souvent à retourner des chaînes formatées au lieu de dates correctes. VoirComment je traite les dates JSON renvoyées par ASP.NET AJAX

5
Dave Ward

Conversion automatique des dates côté client (si vous utilisez jQuery)

-

Vous ne l'avez pas spécifié, mais puisque vous utilisez ASP.NET MVC , vous pourriez utiliser jQuery. Si vous le faites, la conversion en dates réelles devient simplement plus simple si vous utilisez le code fourni sur cet article de blog . Le code étend la fonctionnalité $.parseJSON() de jQuery, de sorte qu'il convertit automatiquement les chaînes de date ISO et ASP.NET en dates JavaScript réelles.

Je l'utilise avec ASP.NET MVC, et cela fonctionne à merveille. La meilleure partie est qu'il est également compatible avec les versions antérieures. Le code existant qui utilise $.parseJSON() fonctionnera exactement comme avant (et fonctionnera de la même manière), mais si vous fournissez le deuxième paramètre et définissez sa valeur sur true, toutes les dates sont automatiquement converties.

L'extension utilise la prise en charge JSON du navigateur natif, le cas échéant, et fonctionne également dans les autres. Les navigateurs modernes supportent quand même cette fonctionnalité.

1
Robert Koritnik

Après avoir joué avec la bibliothèque Json.NET, je me demande pourquoi vous choisiriez d’utiliser IsoDateTimeConverter par rapport à JavascriptDateTimeConverter.

J'ai trouvé cela plus facile à utiliser avec les interfaces Ext JS que j'utilisais lors de la sérialisation des dates à partir d'un contrôleur MVC. 

JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.Formatting = Formatting.Indented;
jsonNetResult.SerializerSettings.Converters.Add(new JavaScriptDateTimeConverter());
jsonNetResult.Data = myObject; 

Je récupère ces données dans un fichier Ext.data.JsonStore qui peut obtenir la valeur renvoyée sous forme de date sans que je doive spécifier un format de date à analyser.

        store:new Ext.data.JsonStore({
            url: pathContext + '/Subject.mvc/Notices',
            baseParams: { subjectId: this.subjectId },
            fields: [
               {name: 'Title'},
               {name: 'DateCreated', type: 'date' }
            ]
        }),

Le JSON renvoyé ressemble à ceci:

[{"Title":"Some title","DateCreated":new Date(1259175818323)}]

Il n'y a aucune raison de convertir au format ISO 8601 et vice versa.

1
brow-cow

Jetez un coup d'œil à l'article de blogjQuery, Ajax, ASP.NET et les dates.

Il explique comment utiliser ASP.NET MVC et jQuery pour transmettre des dates via JSON entre le serveur et le client.

0
Alex