2010-12-18 3 views
3

J'ai un problème où si mon fichier JSON ressemble à ceComment lire un fichier JSON "imbriqué" avec "DataContractJsonSerializer" dans C# .NET (téléphone win7)?

{ « Nombres »: « 45387 », « Mots »: « seaux spatiaux »}

je peux le lire très bien, mais si elle ressemble à ceci:

{ "Main": { "Nombres": "45387", "Mots": "seaux d'espace"},
"Quelque chose": { "Nombres": "12345", "Mots" : "Kransky"}}

Je ne reçois aucune information. Je n'ai aucune idée comment basculer entre Main et Something! Chargement d'un JSON avec ces informations « imbriquées » en utilisant ce code,

var ser = new DataContractJsonSerializer(typeof(myInfo)); 

var info = (myInfo)ser.ReadObject(e.Result); 

// La classe étant enregistrerez mes informations

[DataContract] 
public class myInfo 
{ 
    [DataMember(Name="Numbers")] 
    public int number 
    { get; set; } 

    [DataMember(Name="Words")] 
    public string words 
    { get; set; } 
} 

Causes de la classe de revenir vide.
J'ai essayé d'ajouter le nom de groupe à DataContract par exemple. [DataContract, Name = "Main"] mais les valeurs des classes restent vides.
J'ai également essayé d'ajouter "principal" à la surcharge du sérialiseur, par exemple. var ser = new DataContractJsonSerializer (typeof (monInfo), "Principal");
Cela provoque une erreur: Expecting element 'Main' de l'espace de noms '' .. 'Element' rencontré avec le nom 'root', namespace ''.
Je préfère utiliser le lecteur json fourni. J'ai regardé json.NET mais j'ai trouvé la documentation trop lourde pour écrire json et sparse avec des informations sur la lecture. Sûrement il me manque quelque chose de simple ici!

Répondre

5

Vous pouvez ajouter une classe wrapper:

[DataContract] 
public class Wrapper 
{ 
    [DataMember] 
    public myInfo Main { get; set; } 

    [DataMember] 
    public myInfo Something { get; set; } 
} 

Maintenant, vous pourriez désérialiser le JSON retour à cette classe d'emballage et d'utiliser les deux propriétés pour accéder aux valeurs.

+0

HAHA! Succès! Darin Dimitrov votre mon héros! Une réponse en 2 minutes et ça a marché! Tellement simple aussi, je pensais que c'était peut-être juste que je manquais d'expertise. <3 <3 <3 Merci beaucoup! – Trinnexx

+0

classe emballé a fait le travail! –