Lorsque vous traitez des fichiers JSON de taille importante, il n'est pas rare de rencontrer des défis en utilisant la méthode standard JsonConvert.Deserialize. Cet article abordera ce problème en examinant une solution unique proposée par Json.NET.
Comme indiqué dans la question d'origine, la méthode de désérialisation par défaut peut entraîner des exceptions de mémoire lors de la gestion gros fichiers JSON. Cela est souvent dû à la nature en mémoire du processus de désérialisation, qui peut devenir problématique pour des ensembles de données volumineux.
Dans le scénario spécifique décrit dans la question, un une complication survient. Le fichier JSON contenait plusieurs tableaux séparés par une syntaxe non valide, le rendant non conforme à la norme JSON. Ce format invalide posait des problèmes pour la désérialisation automatique de Json.NET.
Pour surmonter ces défis, Json.NET propose une solution spécialisée : le JsonTextReader. En utilisant directement un JsonTextReader pour lire le fichier JSON, nous pouvons définir l'indicateur SupportMultipleContent sur true. Cet indicateur permet au lecteur de gérer les formats JSON non standard contenant plusieurs tableaux.
Au lieu de tenter de désérialiser l'intégralité du fichier en une seule fois, nous adoptons une approche de streaming. À l'aide d'une boucle, nous pouvons désérialiser chaque élément individuel dans le fichier JSON, ce qui nous permet de traiter les données de manière efficace en termes de mémoire.
L'extrait de code ci-dessous illustre cette approche de streaming :
using (WebClient client = new WebClient()) using (Stream stream = client.OpenRead(stringUrl)) using (StreamReader streamReader = new StreamReader(stream)) using (JsonTextReader reader = new JsonTextReader(streamReader)) { reader.SupportMultipleContent = true; var serializer = new JsonSerializer(); while (reader.Read()) { if (reader.TokenType == JsonToken.StartObject) { Contact c = serializer.Deserialize<Contact>(reader); Console.WriteLine(c.FirstName + " " + c.LastName); } } }
En utilisant JsonTextReader avec l'indicateur SupportMultipleContent défini, nous pouvons analyser efficacement les gros fichiers JSON, même face à une syntaxe non standard. Cette approche garantit à la fois l'efficacité de la mémoire et l'intégrité des données.
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!