使用Newtonsoft.Json.dll序列化和反序列化


關鍵字:【序列化】【反序列化】【Json】【Newtonsoft.Json】

序列化和反序列化的規則

<1>NewtonSoft只能操作public字段or屬性

<2>Json字符串若提供類中沒有的字段or屬性,反序列化時會忽視之,並不拋出異常

<3>反序列化的過程:

調用無參構造函數,new出一個實例,然后使用Json字符串中包含的字段or屬性為成員賦值,Json字符串未提供的字段or屬性的值是無參構造函數初始化的值或是0,false,null;若類未提供無參構造函數,則調用有參構造函數,但是要保證類僅有一個有參構造函數,多個有參構造函數時,若不指定哪個構造函數來反序列化,編譯器會報錯。所以,盡可能的為會進行序列化和反序列化的類提供無參構造函數。

 

class Person
{
    private string name;
    public string Name { get => name; set => name = value; }

    //年齡
    private int age;
    public int Age { get => age; set => age = value; }

    //城市
    public string City { get; set; }

    //技能
    public List<string> languages;

    public Person()
    {
        Name = "Andrew Magic";
        Age = 20;
        City = "Zhuhai";
        languages = new List<string>();
    }
}

序列化一個對象

Person p1 = new Person();
string p1JsonStr = JsonConvert.SerializeObject(p1);

反序列化一個對象

string p2JsonStr = "{\"Name\":\"Jack\" }";
Person p2 = JsonConvert.DeserializeObject<Person>(p2JsonStr);

序列化多個對象

Person p3 = new Person();
p3.Name = "LiMing";
p3.Age = 22;
p3.City = "Shanghai";
p3.languages.AddRange(new string[] { "C", "Java", "PHP" });

Person p4 = new Person();
p4.Name = "ZhangSan";
p4.Age = 20;
p4.City = "Beijing";
p4.languages.AddRange(new string[] { "C#", "Python", "Go" });

List<Person> list = new List<Person> { p3, p4 };
string objectsJsonStr = JsonConvert.SerializeObject(list);

反序列化多個對象

List<Person> list = JsonConvert.DeserializeObject<List<Person>>(objectsJsonStr);
foreach (Person item in list)
{
    Console.WriteLine(item.Name);
}

 Json時間字符串的處理

讀取Json字符串的技巧


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM