Parser Json avec plusieurs objets newtonsoft
Je suis d'essayer d'analyser une plutôt alambiqué/inutilement compliqué sortie JSON à l'aide de newtonsoft en C#, cependant, pour une raison quelconque, mon analyseur retourne toujours null et ne pas dire exactement pourquoi c'est le cas.
Un exemple d'un fichier JSON, je suis en train de l'analyser:
{
"response": {
"success": 1,
"current_time": 1362339098,
"prices": {
"35": {
"11": {
"0": {
"current": {
"currency": "keys",
"value": 39,
"value_high": 41,
"date": 1357515306
},
"previous": {
"currency": "keys",
"value": 37,
"value_high": 39
}
}
},
"3": {
"0": {
"current": {
"currency": "metal",
"value": 0.33,
"value_high": 0.66
}
}
}
},
"5002": {
"6": {
"0": {
"current": {
"currency": "usd",
"value": 0.39,
"value_high": 0.42,
"date": 1358090106
}
}
}
},
"5022": {
"6": {
"1": {
"current": {
"currency": "metal",
"value": 1.33,
"value_high": 1.55,
"date": 1357515175
}
}
}
}
}
}
}
Et le C# analyseur je suis en utilisant. Je lance le getCurrentPrices() pour retourner une PriceParser objet, mais au lieu de l'objet renvoyé est toujours null.
using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;
using System.Diagnostics;
namespace SteamBot
{
class PriceParser
{
//Methods
public PriceParser updatePrices()
{
var json = File.ReadAllText("test.json");
ParserResult result = JsonConvert.DeserializeObject<ParserResult>(json);
return result.result;
}
public Data currentPrices { get; set; }
//DATA
public class Data
{
public Response Response { get; set; }
}
public class Response
{
public string success { get; set; }
public string current_time {get; set;}
public List<Price> prices { get; set;}
}
public class Price
{
public int defindex { get; set; }
public int quality { get; set; }
public Current current { get; set; }
public Previous previous { get; set; }
}
public class Current
{
public string currency { get; set; }
public float value { get; set; }
public float value_high { get; set; }
public int date { get; set; }
}
public class Previous
{
public string currency { get; set; }
public float value { get; set; }
public float value_high { get; set; }
public int date { get; set; }
}
protected class ParserResult
{
public PriceParser result { get; set; }
}
}
}
Je suis probablement passé à côté de quelque chose de stupide, mais pour la vie de moi je ne peux pas comprendre ce qui, n'importe qui avec plus JSON querelles expérience de savoir ce qui se passe ici?
- J'ai édité ton titre. Se reporter à la rubrique "si vous avez des questions comprennent “tags” dans leurs titres?", où le consensus est "non, ils ne devraient pas".
Vous devez vous connecter pour publier un commentaire.
Vous obtenez des valeurs null, car votre structure de classe ne correspond pas à votre JSON.
Le premier problème, c'est que vous êtes la désérialisation d'un
ParserResult
quand vous devriez être à l'aide d'unData
.Data
a unresponse
propriété, correspondant à votre JSON.ParserResult
n'a pas cette propriété.Le deuxième problème est que vous avez défini
prices
être unList<Price>
, mais votre JSON ne contient pas un tableau. Au lieu de cela, la structure JSON est en fait une série de dictionnaires imbriqués.Essayez de définir votre intérieur des classes comme ceci:
Puis, dans votre
updatePrices
méthode, vous pouvez désérialiser comme ceci:Ici est de savoir comment vous vider les données:
Et voici la sortie de la ci-dessus: