使用Json.NET反序列化后,嵌套的类成员将变为null

时间:2019-05-27 10:16:39

标签: c# .net json json.net

我有一个带有2个嵌套类的类

[Serializable]
public class Gazeta
{
    public class DaneOsobowe
    {
        [JsonProperty(PropertyName = "imie")]
        public string imie { get; set; }
        [JsonProperty(PropertyName = "nazwisko")]
        public string nazwisko { get; set; }
        public DaneOsobowe(){}
    }
    public class Statystyki
    {
        [JsonProperty(PropertyName = "Wyswietlenia")]
        public int wyswietlenia { get; set; }
        [JsonProperty(PropertyName = "Oceny")]
        public double oceny { get; set; }
        public Statystyki() {}
    }

    public DaneOsobowe dane;
    public Statystyki stats;
    [JsonProperty("Identyfikator")]
    public int id { get; set; }

    public Gazeta()
    {
        DaneOsobowe dane = new DaneOsobowe();
        Statystyki stats = new Statystyki();
    }
}

并反序列化此json文件

[
{
    "Data": "2017-06-22",
    "Identyfikator": 0,
    "imie": "Jerzy",
    "nazwisko": "Romb",
    "Oceny": 4.6,
    "Wyswietlenia": 48
},
{
    "Data": "2018-01-13",
    "Identyfikator": 1,
    "imie": "Janusz",
    "nazwisko": "Kwadrat",
    "Oceny": 4.5,
    "Wyswietlenia": 61
},
{
    "Data": "2017-09-21",
    "Identyfikator": 2,
    "imie": "John",
    "nazwisko": "Smith",
    "Oceny": 4.2,
    "Wyswietlenia": 33
}

]

使用此方法:

public static void Deserialize(string filename)
    {
        using (StreamReader r = new StreamReader(filename))
        {
            string json = r.ReadToEnd();
            var gazety = JsonConvert.DeserializeObject<List<Gazeta>>(json);
            foreach (var item in gazety)
            {
                Console.WriteLine("Autorem artykulu o id: {0} jest {1} {2}.", item.id, item.dane.imie, item.dane.nazwisko);
            }
        }
    }

,但是在运行时程序会抛出System.NullReferenceException并提示item.dane为null。从昨天开始,我一直在玩它,而最接近它的工作是在程序可以保存id的情况下,但将 imie nazwisko 返回为空字符串。顺便说一句,我有使用嵌套类/结构的要求,所以我不能只是将每个成员都放在 Gazeta 类中。 这些嵌套类有什么问题(请确保它们是问题所在,因为它们似乎不可访问)?还是代码的任何部分错了?

0 个答案:

没有答案