2012-05-02 2 views
0

Je ne sais pas si c'est moi ou le JSON que je reçois. Quoi qu'il en soit, je lisais cet autre article que je pensais était pertinent, mais aucune idée de ce que les gars parlait quand il a compris ce qu'il fallait pour more json c# issuesException lors de l'analyse JSON avec DataContractJsonSerializer

ici est un échantillon du JSON Je reçois maintenant

{ 
    "totalResult": 2, 
    "merchants": { 
     "1718167": { 
      "merchantRank": "29", 
      "merchantName": "bob the builders factory", 
      "merchantSlogan": "if he can't fix it we can", 
      "merchantBdesc": "", 
      "merchantLogo": "pic1.gif", 
      "merchantLink": "http:\/\/www.randomlink.com\/", 
      "merchantAddress": "place 
street St 
area 
city 
1111", 
      "merchantLat": "-15.9935425", 
      "merchantLng": "58.0836955", 
      "merchantGeoLevel": "st", 
      "merchantDistance": "0.00", 
      "merchantCategories": "builder", 
      "merchantEmail": "", 
      "merchantUrl": "http:\/\/www.randomlink.com\/", 
      "merchantPhone": "", 
      "merchantMobile": "", 
      "merchantSrc": "AJF" 
     }, 
     "113711": { 
      "merchantRank": "229", 
      "merchantName": "A A A Builders", 
      "merchantSlogan": "", 
      "merchantBdesc": "", 
      "merchantLogo": "pic26.gif", 
      "merchantLink": "http:\/\/www.randomlink.com\/", 
      "merchantAddress": "", 
      "merchantLat": "", 
      "merchantLng": "", 
      "merchantGeoLevel": "", 
      "merchantDistance": "0.00", 
      "merchantCategories": "Builder", 
      "merchantEmail": "[email protected]", 
      "merchantUrl": "http:\/\/randomlink.com", 
      "merchantPhone": "", 
      "merchantMobile": "", 
      "merchantSrc": "GHF" 
     } 
    } 
} 

J'ai réduit le nombre de résultats, de toute façon, alors j'essayais de construire les contrats de données pour cela et je suis tombé sur un problème que j'avais précédemment, où une supercherie futée m'a donné les résultats que je avoir besoin. Cependant, cette fois, c'est différent ...

En utilisant le [DataContract] je peux obtenir le totalResult, cependant, pour obtenir des marchands, je continue à recevoir des erreurs ... et je crois que parce que le "113711", et le "113711" sont dynamiques cela provoque un problème pour créer un modèle de données. Alors j'ai pensé que peut-être un dictionnaire résoudrait ce problème. Cependant, chaque fois que je l'essaie, j'ai des erreurs !!

Voici ce que j'ai essayé d'utiliser:

[DataContract] 
public class result 
{ 
    [DataMember(Name = "totalResult")] 
    public string totalResult { get; set; } 
    [DataMember(Name = "merchants")] 
    public Dictionary<string, metchant_info> merchants { get; set; } 
} 
[DataContract] 
public class metchant_info 
{ 
    [DataMember(Name = "merchantRank")] 
    public string merchantRank; 
    [DataMember(Name = "merchantName")] 
    public string merchantName; 
    [DataMember(Name = "merchantSlogan")] 
    public string merchantSlogan; 
    [DataMember(Name = "merchantBdesc")] 
    public string merchantBdesc; 
    [DataMember(Name = "merchantLogo")] 
    public string merchantLogo; 
    [DataMember(Name = "merchantLink")] 
    public string merchantLink; 
    [DataMember(Name = "merchantAddress")] 
    public string merchantAddress; 
    [DataMember(Name = "merchantLat")] 
    public string merchantLat; 
    [DataMember(Name = "merchantLng")] 
    public string merchantLng; 
    [DataMember(Name = "merchantGeoLevel")] 
    public string merchantGeoLevel; 
    [DataMember(Name = "merchantDistance")] 
    public string merchantDistance; 
    [DataMember(Name = "merchantCategories")] 
    public string merchantCategories; 
    [DataMember(Name = "merchantEmail")] 
    public string merchantEmail; 
    [DataMember(Name = "merchantUrl")] 
    public string merchantUrl; 
    [DataMember(Name = "merchantPhone")] 
    public string merchantPhone; 
    [DataMember(Name = "merchantMobile")] 
    public string merchantMobile; 
    [DataMember(Name = "merchantSrc")] 
    public string merchantSrc; 
} 

et voici le code derrière ...

  try 
      { 
       Stream responseStream = e.Result; 
       DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(result)); 
       result response = (result)ser.ReadObject(responseStream); 
      } 
      catch (Exception ex) 
      { 
       return; 
      } 

L'erreur que je reçois est actuellement:

"Could not evaluate expression" 

si vous voulez la trace de la pile, je la posterai, mais c'est une assez grande quantité d'informations inutiles ... Aussi, si vous changez le datame Marchands mber à une chaîne, vous verrez l'erreur suivante:

"System.Collections.Generic.Dictionary`2[System.String,System.Object]" 

Alors ... des idées?

+0

En ce qui concerne - "System.Collections.Generic.Dictionary'2 [System.String, System.Object]" où est le reste de cette erreur? –

+0

Veuillez utiliser un meilleur nom pour votre demande – Tarion

+0

@ Stuart.Sklinar c'est ce qui est retourné dans la chaîne, il n'y a pas d'autres informations – Ghostfire

Répondre

3

En utilisant Json.Net, vous pouvez gérer le cas dynamiquement comme ci-dessous

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

foreach (var item in obj["merchants"]) 
{ 
    Console.WriteLine(item.First()["merchantName"]); 
} 

ou vous pouvez désérialiser chaque merchant à votre objet metchant_info dans une boucle

foreach (var item in obj["merchants"]) 
{ 
    var m = JsonConvert.DeserializeObject<metchant_info>(item.First().ToString()); 
    Console.WriteLine(m.merchantName); 
} 
+0

Je vais essayer et vous dire ce que je reçois, merci:> – Ghostfire

0

Je n'ai pas une solution de travail, mais après un peu de recherche, j'ai trouvé les informations suivantes:

En regardant cette question: How would I read into a 'nested' Json file with 'DataContractJsonSerializer' in C# .NET (win7 phone)? le problème semble être le

public Dictionary<string, metchant_info> merchants { get; set; } 

Il semble y avoir un problème avec la façon dont la sérialisation gère les dictionnaires: Deserialization problem with DataContractJsonSerializer

Any way to make DataContractJsonSerializer serialize Dictionaries properly?

espère que vous pouvez comprendre.

Questions connexes