-1

J'essaye de désérialiser JSON en C# mais je reçois NullReferenceException et je ne sais pas pourquoi.Deserialzing JSON en C#

Voici JSON je suis en train d'analyser:

{"Entries": {"Entry": {"day": "28","month": "10","year": "1955","type": "birthday","title": "Bill Gates was born!","picture": "","video": ""}}} 

et je suis en utilisant ce code

public class Entry 
{ 
    public string day { get; set; } 
    public string month { get; set; } 
    public string year { get; set; } 
    public string type { get; set; } 
    public string title { get; set; } 
    public string picture { get; set; } 
    public string video { get; set; } 
} 

public class Entries 
{ 
    public List<Entry> entry { get; set; } 
} 

private void buttonSearch_Click(object sender, EventArgs e) 
{ 
    string json = new StreamReader("events.json").ReadToEnd(); 
    var entries = JsonConvert.DeserializeObject<Entries>(json); 
    MessageBox.Show(entries.entry[0].day); // NullReferenceException 
} 

Pourquoi ai-je cette erreur et comment puis-je résoudre ce problème?

et quand je change le JSON

{"Entries": ["Entry": {"day": "28","month": "10","year": "1955","type": "birthday","title": "Bill Gates was born!","picture": "","video": ""}]} 

Je reçois After parsing a value an unexpected character was encountered: :. Path 'Entries[0]', line 1, position 20.

EDIT

J'ai joué avec le JSON et celui ci-dessous a fonctionné pour moi:

[{"day": "28","month": "10","year": "1955","type": "birthday","title": "Bill Gates was born!","picture": "","video": ""}] 
+0

Joindre un débogueur. Inspectez les données désérialisées réelles. Quoi qu'il en soit, le problème est * il n'y a pas de tableau * dans le JSON. – user2246674

+0

Le débogueur dit que les entrées sont nulles et je ne vois pas pourquoi. – armin

+0

".. le problème est * il n'y a pas de tableau * dans le JSON". Le désérialiseur nécessite un tableau pour pouvoir remplir l'entrée 'List '. Faites confiance au désérialiseur - s'il ne remplit pas correctement un champ, les données sources ne s'aligneront probablement pas. (De plus, certains noms - par exemple Entrée vs entrée - sont incorrects.) – user2246674

Répondre

1

Votre json est co rrect, si vous devez modifier les définitions de classe comme suit, puis cela fonctionnera

(BTW: vous pouvez trouver this site utile)

var entries = JsonConvert.DeserializeObject<Root>(json); 

public class Entry 
{ 
    public string day { get; set; } 
    public string month { get; set; } 
    public string year { get; set; } 
    public string type { get; set; } 
    public string title { get; set; } 
    public string picture { get; set; } 
    public string video { get; set; } 
} 

public class Entries 
{ 
    public Entry Entry { get; set; } 
} 

public class Root 
{ 
    public Entries Entries { get; set; } 
} 
+0

+1 pour le lien du site! Je ne savais pas à ce sujet. –

+0

Merci pour la réponse, mais cela n'a pas fonctionné pour moi. Le gars au-dessus m'a dit que mon JSON est incorrect (vérifiez la version mise à jour). J'ai besoin que les entrées de classe aient un tableau de classes Entrée. – armin