• JSON.Net使用总结


    前端时间一直用JSON.Net 现在总结一下

    1. 用[JsonIgnore]来忽略类中不序列化的属性

    public class Product
    {
        public string Name { get; set; }
        public decimal Price { get; set; }
        [JsonIgnore]
        public int ProductCode { get; set; } // omitted
    }

    2. 若想选择类中哪些成员进行序列化,可以在类上标记DataContract 属性,若类上已标记此Attribute,则类中所有成员都不会进行序列化,除非成员上有标记DataMember Attribute;即用 [DataMember]来序列化成员

    [DataContract]
    public class Product
    {
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public decimal Price { get; set; }
        public int ProductCode { get; set; }  // omitted by default
    }

    3. 只读属性也可以序列化

    4. 日期属性:JSON.Net 会把日期用ISO 8601格式进行序列化。UTC日期格式后缀是以 "Z"结尾,本地时间会包含一个时间偏差

    2012-07-27T18:51:45.53403Z         // UTC
    2012-07-27T11:51:45.53403-07:00    // Local

    5. 处理对象循环引用问题,例如:如下2个类,相互引用,用JSON.NET进行序列化会报Error

    public class Employee
    {
        public string Name { get; set; }
        public Department Department { get; set; }
    }

    public class Department
    {
        public string Name { get; set; }
        public Employee Manager { get; set; }
    }
    为解决此问题,有2种解决办法:

    方法一:

    Employee emp = new Employee();

    JsonConvert.SerializeObject(emp, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore});

    方法二:

    public class Employee
    {
        public string Name { get; set; }

      [JsonIgnore]
        public Department Department { get; set; }
    }

    public class Department
    {

        public string Name { get; set; }

      [JsonIgnore]
        public Employee Manager { get; set; }
    }

    6. 序列化对象

    JsonConvert.SerializeObject(emp);

    string json = Newtonsoft.Json.JsonConvert.SerializeObject(emp, Newtonsoft.Json.Formatting.Indented);  // 缩进输出

     string included = Newtonsoft.Json.JsonConvert.SerializeObject( emp,  Newtonsoft.Json.Formatting.Indented, //缩进  

       new Newtonsoft.Json.JsonSerializerSettings { NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore }  // 忽略Null对象输出 );  

    7. 反序列化对象

    string emp = "{"Name":"Alice"}";

    JsonConvert.DeserializeObject<Employee>(text);

  • 相关阅读:
    axios解决调用后端接口跨域问题
    vuex的使用入门-官方用例
    vue使用axios实现前后端通信
    vue组件间通信用例
    vue-router的访问权限管理
    vue-router使用入门
    PHP 流程控制
    PHP 表达式和运算符
    PHP 预定义变量
    PHP 常量
  • 原文地址:https://www.cnblogs.com/kittyguo/p/4618547.html
Copyright © 2020-2023  润新知