3 votes

C# obtenir la valeur d'un objet json désérialisé

Je suis actuellement en train de désérialiser une chaîne json en utilisant le paquet nuget Newtonsoft.Json en utilisant le code suivant :

var data = (JObject)JsonConvert.DeserializeObject(json);

Je reçois maintenant un objet au format suivant :

{{  "meta": {    "rap": 2098,    "count": 5  },  "data": [    {      "name": "Gold Tetramino of Mastery",      "rap": 735,      "uaid": "16601901",      "link": "https://www.roblox.com/Gold-Tetramino-of-Mastery-item?id=5786047",      "img": "https://t4.rbxcdn.com/081337d7ea86e6a406512aaa83bbcdeb",      "serial": "---",      "count": 1    },    {      "name": "Silver Tetramino of Accomplishment",      "rap": 385,      "uaid": "16601900",      "link": "https://www.roblox.com/Silver-Tetramino-of-Accomplishment-item?id=5786026",      "img": "https://t1.rbxcdn.com/60da69cd76f8dad979326f63f4a5b657",      "serial": "---",      "count": 1    },    {      "name": "Subzero Ski Specs",      "rap": 370,      "uaid": "155175547",      "link": "https://www.roblox.com/Subzero-Ski-Specs-item?id=19644587",      "img": "https://t4.rbxcdn.com/8ead2b0418ef418c7650d34103d39b6d",      "serial": "---",      "count": 1    },    {      "name": "Rusty Tetramino of Competence",      "rap": 319,      "uaid": "16601899",      "link": "https://www.roblox.com/Rusty-Tetramino-of-Competence-item?id=5785985",      "img": "https://t2.rbxcdn.com/968ad11ee2f4ee0861ae511c419148c8",      "serial": "---",      "count": 1    },    {      "name": "Bluesteel Egg of Genius",      "rap": 289,      "uaid": "16601902",      "link": "https://www.roblox.com/Bluesteel-Egg-of-Genius-item?id=1533893",      "img": "https://t7.rbxcdn.com/48bf59fe531dd1ff155e455367e52e73",      "serial": "---",      "count": 1    }  ]}}

J'essaie maintenant d'en tirer la valeur suivante :

"rap": 2098,

J'ai juste besoin de 2098 et j'ai essayé le code suivant :

string rap = data["rap"].Value<string>();

Mais malheureusement, cela ne fonctionnerait pas. Quelqu'un a-t-il une idée de la manière d'obtenir la valeur ?

0voto

eocron Points 3212

Il suffit d'utiliser la représentation dynamique de l'objet :

dynamic obj = JsonConvert.DeserializeObject(json)
var value = obj.meta.rap;

JObject facilement convertible en type dynamique lui-même. Vous pouvez obtenir une chaîne de caractères ou un nombre entier à partir de cette valeur :

var ivalue = (int)obj.meta.rap;
var svalue = (string)obj.meta.rap;

0voto

Essayez d'utiliser les éléments suivants

var test = JsonConvert.DeserializeObject<dynamic>(param);

var testDTO = new TPRDTO();
testDTO.TPR_ID = test.TPR_ID.Value;

Note : Pour l'utilisation de JsonConvert vous devez installer Newton-Soft de votre gestionnaire de paquets

0voto

Meysam Points 166

Le problème est que vous convertissez le json désérialisé en un JObject. Si vous voulez avoir le JObject, faites simplement ceci :

JObject.Parse(json); 

alors vous avez le JObject et vous pouvez accéder à un chemin spécifique (pour extraire la valeur voir este )

vous avez aussi une autre option qui est de désérialiser votre json dans une classe que vous avez dans votre code comme ceci :

var instanceOFTheClass =  JsonConvert.DeserializeObject<YourClassName>(json); 

avec le code ci-dessus, vous pouvez accéder à toutes les propriétés et valeurs que vous voulez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X