http://james.newtonking.com/json/help/index.html

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace AccpStudentMIS
{
    //此类目的是防治序列化Json字符串时的循环引用问题
    //此类为Object类的扩展方法,需要引用Newtonsoft.Json.dll类
    //使用方法:在Controller中调用 Content(对象.ToJsonString(), "text/html;charset=UTF-8");方法来返回Json
    public static class ObjectExtentions
    {
        public static string ToJsonString(this Object obj)
        {

JsonSerializerSettings jsSettings = new JsonSerializerSettings();
            jsSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            return JsonConvert.SerializeObject(obj, jsSettings);
        }
    }
}

Newtonsoft中的几个妙用

记录Newtonsoft在序列成Json时的两个妙用

JsonSerializerSettings js = new JsonSerializerSettings();

//1、属性为Null时不做序列化输出

js.NullValueHandling = NullValueHandling.Ignore;

//2、属性为DateTime时,做指定的格式输出

js.Converters.Add(new IsoDateTimeConverter()
            {
                DateTimeFormat ="yyyy-MM-dd HH:mm:ss"
            });

JsonConvert.SerializeObject(obj, Formatting.None, js);

//3、设定某个属性不做json序列化输出(在属性头加[JsonIgnore])

[JsonIgnore]
       public string Srl
       {
           get;
           set;
       }

/// <summary>
        /// 转化为JSON格式
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="depth">RecursionLimit</param>
        /// <returns></returns>
        public static string ToJson(this object obj, int maxDepth = 10)
        {
            JsonSerializerSettings settings = new JsonSerializerSettings();
            //settings.MaxDepth = maxDepth;
            settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            settings.Converters.Add(new JavaScriptDateTimeConverter());
            return JsonConvert.SerializeObject(obj, settings);
        }

public static string ToJsonIsoDateTime(this object obj)
        {
            JsonSerializerSettings settings = new JsonSerializerSettings();
            settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            settings.Converters.Add(new IsoDateTimeConverter());
            return JsonConvert.SerializeObject(obj, settings);
        }

/// <summary>
        /// 将JSON反序列化为对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sJason"></param>
        /// <returns></returns>
        public static T FromJson<T>(this string obj, int maxDepth = 2)
        {
            JsonSerializerSettings settings = new JsonSerializerSettings();
            //settings.MaxDepth = maxDepth;
            settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            settings.Converters.Add(new JavaScriptDateTimeConverter());
            return JsonConvert.DeserializeObject<T>(obj, settings);
        }

/// <summary>
        /// 将JSON反序列化为对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sJason"></param>
        /// <returns></returns>
        public static T FromJsonIsoDateTime<T>(this string obj)
        {
            return JsonConvert.DeserializeObject<T>(obj, new IsoDateTimeConverter());
        }

/// <summary>
        /// 转化为JSON格式
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="depth">RecursionLimit</param>
        /// <returns></returns>
        public static string ToJson(object obj, int maxDepth = 2)
        {
            return obj.ToJson(maxDepth);
        }

/// <summary>
        /// 将JSON反序列化为对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sJason"></param>
        /// <returns></returns>
        public static T FromJson<T>(string obj, int maxDepth = 2)
        {
            return obj.FromJson<T>(maxDepth);
        }

 
 
 
 
 

最新文章

  1. java请求https地址如何绕过证书验证?
  2. IntelliJ IDEA 在网页修改数据,但是在浏览器刷新的时候,不能读取到修改之后的数据
  3. Design Pattern: Not Just Mixin Pattern
  4. Codeforces 724C [坐标][乱搞][模拟]
  5. GridView的常规用法
  6. spring 标注 详解
  7. __LINE__ check_arr_empty($arr)
  8. HDU1058Humble Numbers
  9. POJ 1650
  10. Swift字符串类型
  11. batch 数字进制的问题
  12. 【HDOJ】4341 Gold miner
  13. ThinkPHP HTML标签代码和UBB互相转换
  14. MySQL的SELECT ...for update
  15. 并发编程(一):从头到脚解读synchronized
  16. sed 实践案例 (不定期更新)
  17. Konckout第三个实例:循环绑定 -- table列表数据的填充
  18. java可用与串口通信的一些库
  19. Codeforces Round #487 (Div. 2) C - A Mist of Florescence
  20. Bash script set help function

热门文章

  1. jenkins二
  2. 网页字体生成工具fontello firefox下无效,未跨域,研究两天得出解决办法
  3. java调试打断点和不打断点执行结果不一致问题解决
  4. Laravel Eloquent ORM--整理(未转)
  5. NTP Reply Flood Attack (NTP反射型DDos攻击)
  6. xcode 筛选error
  7. php排序函数学习
  8. Atitit. 悬浮窗口的实现 java swing c# .net c++ js html 的实现
  9. video标签常用属性及说明
  10. Struts2初学 Struts2在Action获取内置对象request,session,application(即ServletContext)