2016-06-17 1 views
0

Tout d'abord, cette question peut avoir été posée auparavant, mais je ne pouvais pas trouver une réponse en raison de la mauvaise formulation je suppose.désérialisation JSON, obtenir le nom des propriétés pas la valeur

Je reçois une chaîne JSON formaté weirdly retour d'un appel WebService

{ 
    "id":5000174774, 
    "name":"company_name", 
    "choices": 
    { 
     "Farmway": 
     { 
      "Head Office (BSU)":[], 
      "Alnwick":[], 
      "Bury St Edmunds":[] 
     }, 
     "Tate": 
     { 
      "Head Office":[], 
      "Tate Britain Entrance":[] 
     } 
    } 
} 

Voici les classes que je voudrais utiliser pour désérialisation

public class RootObject 
{ 
    [JsonProperty("id")] 
    public long Id { get; set; } 

    [JsonProperty("name")] 
    public string Name { get; set; } 

    [JsonProperty("choices")] 
    public Company[] Companies{ get; set; } 
} 

public class Company 
{ 
    public string[] Shops { get; set; } 
} 

Je ne l'ai jamais vu un JSON formaté comme ça, et je n'ai aucune idée de comment obtenir le nom des propriétés au lieu de valeurs. "choices" n'est pas un array mais un object, mais je ne peux pas connaître ses propriétés à l'avance. Je veux juste avoir toutes les entreprises et leurs magasins.

J'espère que cela a un sens.

Répondre

0

Je ne sais pas au sujet de votre désérialiseur, mais généralement un bon candidat est un Dictionary:

[JsonProperty("choices")] 
public Dictionary<string, Dictionary<string, List<OfSomething>> Companies { get; set; } 

Ainsi, votre première clé est une chaîne, avec le nom de la société, et la valeur est une autre dictionnaire, reliant les BU de l'entreprise à la liste/tableaux de je-ne-sais-quoi.

Si vous devez ensuite élaborer cette structure en quelque chose d'autre, vous pouvez la traiter avec un peu de Linq.