web-dev-qa-db-fra.com

Comment analyser manuellement une chaîne JSON dans net-core 2.0

J'ai une chaîne json avec la structure suivante

{
    "resource": "user",
    "method": "create",
    "fields": {
        "name": "John",
        "surname: "Smith",
        "email": "[email protected]"
    }
}

Les clés dans les champs sont variables, cela signifie que je ne les connais pas à l'avance

Ainsi, au lieu de désérialiser une chaîne JSON en un objet, je dois traverser le JSON, afin d’obtenir les propriétés dans fields dans un dictionnaire ou quelque chose du genre.

J'ai entendu parler de la bibliothèque Json.NET et de sa capacité à analyser des jsons dynamiques, mais je ne suis pas sûre que cela soit déjà inclus dans net-core ou non.

Quel serait le moyen le plus simple et le plus simple de réaliser cela dans net-core 2.0? Exemple de code serait apprécié.

6
opensas

Oui. Vous pouvez ajouter le package Newtonsoft.json à votre projet principal .net. Et pour interroger l'objet json dynamique, vous pouvez utiliser l'objet JObject fourni par la bibliothèque pour analyser votre json dans un objet dynamique. Voici le link du document.

Compte tenu de votre échantillon JSON, cela peut ressembler à ceci 

 var resource = JObject.Parse(json);
 foreach (var property in resource.fields.Properties())
 {
   Console.WriteLine("{0} - {1}", property.Name, property.Value);
 }
18
Jaya

Json.NET est la bibliothèque de référence lorsque vous sérialisez des objets .NET. Toutefois, lorsque la structure des objets n'est pas statique, les API de l'espace de noms System.Json seront plus simples à utiliser. System.Json peut être utilisé dans .NET Core 2.0 en installant un package à partir de NuGet comme ceci:

dotnet add package System.Json --version 4.4.0

Voici un bon tutoriel sur l’utilisation des API de l’espace de noms System.Json: Utilisation de JSON dans .NET - Exemple avec Silverlight

4
Matjaž Drolc
var serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
dynamic jsonObject = serializer.Deserialize(jsonString, typeof(Example));