码迷,mamicode.com
首页 > Web开发 > 详细

NewtonSoft.Json

时间:2019-07-27 10:09:32      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:ges   tle   字段   name   val   json   public   bar   shang   

序列化和反序列化的规则

<1>NewtonSoft只能操作public属性(原则上C#编程中不定义public的字段,所以不说字段)

<2>Json字符串若提供类中没有的属性,反序列化时会忽视之,并不抛出异常

<3>反序列化的过程:

调用无参构造函数,new出一个实例,然后使用Json字符串中包含的字段or属性为成员赋值,Json字符串未提供的字段or属性的值是无参构造函数初始化的值或是0,false,null;private的字段or属性会用默认值或无参构造函数去初始化。若类未提供无参构造函数,则调用有参构造函数,但是要保证类仅有一个有参构造函数,多个有参构造函数时,若不指定哪个构造函数来反序列化,编译器会报错。所以,尽可能的为会进行序列化和反序列化的类提供无参构造函数。

技术图片
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);
}

 

NewtonSoft.Json

标签:ges   tle   字段   name   val   json   public   bar   shang   

原文地址:https://www.cnblogs.com/liliuwei/p/11253748.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!