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);

  • 相关阅读:
    [置顶] 基于平板电脑的面访调查
    spring技术翻译开始
    (3)选择元素——(9)为交替的列加样式(Styling alternate rows)
    网页换肤
    djano-cms学习笔计(一)
    【Android】Activity的菜单机制和方法解析
    canvas
    Flexbox-CSS3弹性盒模型flexbox完整版教程
    原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y
    怎么使用jquery判断一个元素是否含有一个指定的类(class)
  • 原文地址:https://www.cnblogs.com/kittyguo/p/4618547.html
Copyright © 2011-2022 走看看