2011-06-02 3 views
1

La réponse est structuré comme celui-ci, c'est un extrait, pourrait manquer une accolade:Comment analyser cette réponse json?

{"2":{"date":1306411951,"price":4.8003,"low":"4.80000000","high":"4.80060000","nicedate":"15:12"},"6":{"date":1306418941,"price":4.654175,"low":"4.40000000","high":"4.80000000","nicedate":"17:02"} 

et je reçois des exceptions de la distribution lors de l'analyse de la chaîne de réponse, même si tous les DataMembers de l'objet sont des chaînes. J'utilise System.Runtime.Serialization.Json pour désérialiser les objets.

En ce moment je fais comme ça:

 Currency[] MapJSONToObjects(string jsonString) 
    { 
     using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(jsonString))) 
     { 
      //Parse 
      var ser = new DataContractJsonSerializer(typeof(Currency[])); 
      Currency[] currencies = (Currency[])ser.ReadObject(ms); 
      return currencies; 
     } 
    } 
+1

Êtes-vous manquant}? Ou peut-être que mes yeux me trompent. –

+0

Ce JSON n'est pas valide. Il y a au moins une accolade manquante à la fin. – Codo

+0

Modifié la question – Phil

Répondre

2

Comme déjà mentionné, vous manquez un } de fuite du JSON. En supposant que ce que vous recevez est correctement mis en forme et JSON cohérente, votre classe Currency devrait ressembler à ceci:

[DataContract] 
public class Currency 
{ 
    [DataMember(Name = "date")] 
    public int Date { get; set; } 
    [DataMember(Name = "price")] 
    public double Price { get; set; } 
    [DataMember(Name = "low")] 
    public string Low { get; set; } 
    [DataMember(Name = "high")] 
    public string High { get; set; } 
    [DataMember(Name = "nicedate")] 
    public string NiceDate { get; set; } 
}

Votre code désérialisation semble bien, bien que vous pourriez envisager d'utiliser JSON.NET si vous rencontrez toujours des problèmes , comme décrit ici: Deserializing variable Type JSON array using DataContractJsonSerializer

+0

La réponse est correcte, j'ai vérifié avec un json-validateur. Ma classe ressemble exactement à votre suggestion (non, vraiment, exactement comme ça) mais je pense que le problème réside dans l'index. Il n'est pas converti correctement car il n'y a pas de propriété pour l'index et l'index n'est pas nommé non plus. Je ne sais pas comment gérer ce scénario spécifique ... – Phil

+0

Vérification JSON.NET maintenant, semble doux. – Phil

+0

Bien que cela n'a pas résolu mon problème, c'est en effet le meilleur moyen dans la plupart des cas. – Phil

Questions connexes