-1

Я пытаюсь десериализовать JSON в C#, но я получаю исключение NullReferenceException, и я не знаю почему.Deserialzing JSON в C#

Вот это JSON Я пытаюсь разобрать:

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

и я использую этот код

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 
} 

Почему я получаю эту ошибку и как я могу это исправить?

и когда я изменить JSON в

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

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

EDIT

Я играл с JSON и одним сильфоном работал для меня:

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

Прикрепление отладчика. Проверьте фактические десериализованные данные. В любом случае проблема заключается в том, что в JSON нет массива *. – user2246674

+0

Отладчик говорит, что записи имеют значение null, и я не понимаю, почему. – armin

+0

«Проблема в том, что в JSON нет массива *. Для десериализатора требуется, чтобы массив мог заполнить «Список entry'. Доверяйте десериализатору - если он не заполняет поле правильно, то исходные данные, вероятно, не выровнены. (Кроме того, некоторые имена - например, «Вступление в запись» - неверны.) – user2246674

ответ

1

Ваш json является co дое правильное, если вы должны изменить определение класса следующим образом, то это будет работать

(BTW: Вы можете найти this site полезные)

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 для ссылки на сайт! Не знал об этом. –

+0

Спасибо за ответ, но это не сработало для меня. Парень выше сказал мне, что мой JSON неверен (проверьте обновленную версию). Мне нужен класс Entries, чтобы иметь массив классов Entry. – armin