zoukankan      html  css  js  c++  java
  • JSON 序列化与反序列化

    JSON序列化与反序列化

    JSON是什么

    JSON是一种轻量级的数据交互格式,简单来说就是键值对形式的字符串,{"name":"admin","age":18}示例如下:

    {
    	"userName": "admin",
    	"age": 17,
    	"gender": true,
    	"books": [{
    		"title": "厚黑学",
    		"date": "1970 年1月1日",
    		"author": null
    	}, {
    		"title": "厚黑学",
    		"date": "1970 年1月1日",
    		"author": "张三"
    	}]
    }
    

    Newtonsoft.Json

    .NET最常用的JSON序列化器,JSON序列化必备,官网:https://www.newtonsoft.com/json

    对象的序列化与反序列化

    将字符串转化成对象

    //JSON JSON字符串
    string str = "{"userName":"admin","age":17,"gender":true,"books":[{"title":"厚黑学","date":"1970 年1月1日","author":null},{"title":"厚黑学","date":"1970 年1月1日","author":"张三"}]}";
    Person p =JsonConvert.DeserializeObject<Person>(str);
    foreach (var item in p.books)
    {
        Console.WriteLine($"书名:{item.title},作者:{item.author}");
    }
    

    将对象转化成JSON

    p.Name = "王二小";
    string tmo = JsonConvert.SerializeObject(p);
    

    序列化与反序列化忽略某些属性

    • 忽略类内所有属性

    [JsonObject(MemberSerialization.OptIn)]用于在序列化与反序列化时忽略一个类里所有的属性,只有当在类内属性上打特性标签[JsonProperty]时才支持序列化与反序列化。

    [JsonObject(MemberSerialization.OptIn)]
    public class Person
    {
        /// <summary>
        /// admin
        /// </summary>
        [JsonProperty]
        public string Name { get; set; }
        /// <summary>
        /// Age
        /// </summary>
        public int age { get; set; }
    
        private int money { get; set; }
    
        /// <summary>
        /// Gender
        /// </summary>
        /// 
        public bool gender { get; set; }
        public List<Books> books { get; set; }
    }
    
    
    • 序列化所有属性(默认)

    默认实体类上默认打着[JsonObject(MemberSerialization.OptOut)]特性标签(可以省略不写),如果要忽略某些属性,要在属性上打[JsonIgnore]。

    [JsonObject(MemberSerialization.OptOut)]
    public class Person
    {
        /// <summary>
        /// admin
        /// </summary>
        [JsonIgnore]
        public string Name { get; set; }
        /// <summary>
        /// Age
        /// </summary>
        public int age { get; set; }
    
        private int money { get; set; }
    
        /// <summary>
        /// Gender
        /// </summary>
        /// 
        public bool gender { get; set; }
        public List<Books> books { get; set; }
    }
    
    • 动态控制实体类属性的是否忽略序列化(默认)

    当某些条件下需要序列化A属性和B属性,某些情况下需要忽略A属性与B属性,我们该怎么做?
    答:使用JsonSerializerSettings设置某实体类对象要忽略序列化的属性(配合if与else控制属性的动态忽略)。

    JsonSerializerSettings jsetting=new JsonSerializerSettings();
    jsetting.ContractResolver = new LimitPropsContractResolver(new string[] { "Age", "IsMarry" });
    Console.WriteLine(JsonConvert.SerializeObject(p, Formatting.Indented, jsetting));
    

    好文推荐

    https://www.lagou.com/lgeduarticle/54110.html 这篇文章详细讲解了一些Json.NET常用方法,言简意赅。

    登峰造极的成就源于自律
  • 相关阅读:
    测测两人的关系.一个小程序,根据用户输入的名字得到笔画数!
    手把手教你做下拉菜单篇
    防止网页内容被复制的最佳方法!
    陈寿福被抓所思二三事!
    测测两人的关系.一个小程序,根据用户输入的名字得到笔画数!
    树状数组
    scanf和cin
    二分答案
    赛后总结
    更新ssl证书后 file_get_contents()方法失效
  • 原文地址:https://www.cnblogs.com/fishpond816/p/14564258.html
Copyright © 2011-2022 走看看