zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    Tair分布式key/value存储
    Ehcache详细解读
    专访阿里中间件高级专家沈询
    boost之词法解析器spirit
    快速部署Python应用:Nginx+uWSGI配置详解
    CMake如何执行shell命令
    show engine innodb status 详解
    HTTP Request header
    json python api
    mysql 索引对于select速度提升作用实验
  • 原文地址:https://www.cnblogs.com/kittyguo/p/4618547.html
Copyright © 2011-2022 走看看