none
自己做的JSON卻解不出來 RRS feed

  • 問題

  • 小弟今天自己設計了一個JSON

      public class Person
            {
                public string Name { get; set; }
                public string ID { get; set; }
                public int Age { get; set; }
    
                public Person(string name, string id, int age)
                {
                    this.Name = Name;
                    this.ID = id;
                    this.Age = age;
                }
            }

    按鈕

      private void button3_Click(object sender, EventArgs e)
            {
                List<Person> players = new List<Person>();
                players.Add(new Person("Peyton", "ID1", 35));
                players.Add(new Person("Drew", "ID2", 31));
                players.Add(new Person("Brett", "ID3", 58));
    
                string output = JsonConvert.SerializeObject(players);
                Console.WriteLine(output);
                Person PlayInfo = JsonConvert.DeserializeObject<Person>(output);
            }

    產生出的JSON變成了

    [{"Name":null,"ID":"ID1","Age":35},{"Name":null,"ID":"ID2","Age":31},{"Name":null,"ID":"ID3","Age":58}]

    突然不知道怎麼反解回去

    是需要定義一個List<Person>去get set?

    有人可以指點一下嗎?


    2015年10月22日 上午 06:48

解答

  • 這樣試試看 

    List<Person> PlayInfo = JsonConvert.DeserializeObject<List<Person>>(output);

    你一開始是用List<Person>去序列化成json

    當然json反序列化 就要用List<Person>

    2015年10月22日 上午 07:00

所有回覆

  • 這樣試試看 

    List<Person> PlayInfo = JsonConvert.DeserializeObject<List<Person>>(output);

    你一開始是用List<Person>去序列化成json

    當然json反序列化 就要用List<Person>

    2015年10月22日 上午 07:00
  • 小弟今天自己設計了一個JSON

      public class Person
            {
                public string Name { get; set; }
                public string ID { get; set; }
                public int Age { get; set; }
    
                public Person(string name, string id, int age)
                {
                    this.Name = Name;
                    this.ID = id;
                    this.Age = age;
                }
            }

    按鈕

      private void button3_Click(object sender, EventArgs e)
            {
                List<Person> players = new List<Person>();
                players.Add(new Person("Peyton", "ID1", 35));
                players.Add(new Person("Drew", "ID2", 31));
                players.Add(new Person("Brett", "ID3", 58));
    
                string output = JsonConvert.SerializeObject(players);
                Console.WriteLine(output);
                Person PlayInfo = JsonConvert.DeserializeObject<Person>(output);
            }

    產生出的JSON變成了

    [{"Name":null,"ID":"ID1","Age":35},{"Name":null,"ID":"ID2","Age":31},{"Name":null,"ID":"ID3","Age":58}]

    突然不知道怎麼反解回去

    是需要定義一個List<Person>去get set?

    有人可以指點一下嗎?


    因為你 Person 類別的建構式寫錯了,你傳進來的是小寫的 name , 裡面卻是 this.Name = Name . 當然會是 null, 因為就是 this.Name= this.Name 啊

    所以要改成 this.Name= name;

    List 的部分參考一樓.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。



    2015年10月22日 上午 07:33
    版主
  • 第一,把 JSON 瞭解清楚 http://blog.kkbruce.net/2011/01/json.html

    第二,把 集合 瞭解清楚 https://msdn.microsoft.com/zh-tw/library/ybcx56wz.aspx

    你把集合物件序列化為 JSON,那就把 JSON 反序列化為集合物件。


    理直氣和,切記。

    個人

    2015年10月22日 上午 07:35