Désactivation de la désérialisation des dates dans Json.NET avec JObject.Parse
Json.NET, une bibliothèque de gestion JSON populaire, offre des options de désérialisation flexibles. Par défaut, il tente de convertir les propriétés avec des valeurs DateTime en objets .NET DateTime. Cependant, dans certains scénarios, ce comportement peut être indésirable.
Considérez le code suivant :
string s = "2012-08-08T01:54:45.3042880+00:00"; JObject j1 = JObject.FromObject(new { time = s }); Object o = j1["time"];
Dans cet exemple, o est une chaîne contenant la valeur date-heure d'origine. Cependant, si la chaîne JSON est transférée vers un autre programme et réanalysée à l'aide de JObject.Parse, le résultat change.
JObject j2 = JObject.Parse(j1.ToString()); Object o2 = j2["time"];
Maintenant, o2 est un objet Date avec une représentation différente. Cet écart peut être problématique dans les situations où la valeur d'origine doit être préservée.
Solution
Pour désactiver la désérialisation de la date lors de l'utilisation de JObject.Parse, Json.NET fournit un approche alternative. Au lieu d'utiliser Parse directement, on peut utiliser un JsonReader pour configurer les options d'analyse.
using(JsonReader reader = new JsonTextReader(new StringReader(j1.ToString()))) { reader.DateParseHandling = DateParseHandling.None; JObject o = JObject.Load(reader); }
En définissant DateParseHandling sur None avant de charger le JSON dans un JObject, les valeurs date-heure seront traitées comme des chaînes, en préservant leur format original.
Notez que cette solution repose sur la méthode Load interne de JObject, qui est invoquée par Parse. Cette approche offre plus de contrôle sur le processus de désérialisation par rapport au comportement par défaut de Parse.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!