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

 
 
 
 
 

此类目的是防治序列化Json字符串时的循环引用问题-------最好解决方案的更多相关文章

  1. JSON.parse 解析json字符串时,遇换行符报错

    Json字符串转换成Json对象时候,有两种方式: 假设d是json字符串: 1,eval('(' + d + ')'). 2,JSON.parse(d): 但是以上方式有隐患,如果Json字符串有换 ...

  2. C# 把对象序列化 JSON 字符串 和把JSON字符串还原为对象

    /// <summary> /// 把对象序列化 JSON 字符串 /// </summary> /// <typeparam name="T"> ...

  3. fastjson在将Map<Integer, String>转换成JSON字符串时,出现中文乱码问题

    fastjson在将Map<Integer, String>转换成JSON字符串时,出现中文乱码问题. 先记下这个坑,改天在看看是怎么导致的,暂时通过避免使用Integer作为键(使用St ...

  4. JSON.parse 解析json字符串时,遇字符串换行符,解析失败

    今天遇到json字符串转对象时报错了,发现有个字符串有换行符,仔细找了原因. 结果是因为JSON.parse转json字符串时遇到一些特殊字符需要先转义,如图所示 然后尝试了各路大神介绍的办法,均不适 ...

  5. 表单序列化json字符串和js时间格式化

    js时间格式化 new Date().format("时间格式") Date.prototype.format = function(fmt) { var o = {        ...

  6. C#序列化json属性名首字母变成小写的解决方案

    原文:C#序列化json属性名首字母变成小写的解决方案 //接口返回自动转小写,容易造成前后端不一致,获取不到数据,切换成转驼峰(首字母大写)如Code/Result //在ConfigureServ ...

  7. Json.NET如何避免循环引用

    Json.NET在将对象序列化为Json字符串的时候,如果对象有循环引用的属性或字段,那么会导致Json.NET抛出循环引用异常. 有两种方法可以解决这个问题: 1.在对象循环引用的属性上打上[Jso ...

  8. [MVC_Json序列化]Json字符串反序列化成C#对象

    上一篇中有Json序列化相关问题得到了解决. 那么结果集为Json串时,如何将Json串转成C#对象呢? 现举例说明: -现有如下字符串数据 string k = "{\"ring ...

  9. C#反序列化json字符串时,提示:应为来自命名空间“”的元素“root”。。遇到名称为“”、命名空间为“”的“None”。

    反序列化调用接口返回的字符串时,出现:应为来自命名空间“”的元素“root”..遇到名称为“”.命名空间为“”的“None”.,导致反序列化数据失败,这种失败并有时候并不会直接提示反序列化失败(抛异常 ...

随机推荐

  1. IntelliJ IDEA 学习(一):IntelliJ IDEA15 破解方法(已验证)

    新的破解方法: 1.进到文件夹中:C:\Windows\System32\drivers\etc ,找到hosts文件,用记事本编辑 2.如果没有找到hosts文件,可在查看设置中勾选“显示隐藏的项目 ...

  2. 温故而知新 通过chrome tool 查看是否产生闭包

    function foo() { var a = 20 var b = 30 function bar() { debugger; return a + b } return bar; } var b ...

  3. 从JSON数据中取出相关数据

    参考: http://www.cnblogs.com/shuilangyizu/p/6019561.html JSON数据如下: { "total": 1, "rows& ...

  4. 常用音频软件:Cool edit pro

    作者:桂. 时间:2017-06-02  11:51:08 链接:http://www.cnblogs.com/xingshansi/p/6932671.html 这里只涉及Cool edit pro ...

  5. 快速创建各种类型的NSAttributeString和NSMutableParagraphStyle

      NSDictionary *attributes = @{ NSForegroundColorAttributeName : [ UIColorredColor ], NSFontAttribut ...

  6. Hive使用过程中的坑

    在Hive脚本中如果有 use db; #即使用数据库 最后一定要有一个exit;脚本,退出hive窗口 否则运行到最后,hive无法启动MR任务,只是卡在打印完成hive脚本处. 例子如下: $Hi ...

  7. GDB和WinDbg中调用函数

    GDB: 特别简单,直接写调用式子即可,如下图的p word.c_str(),其中word的类型是std::string WinDbg:目前都说是.call命令,说实话我宁愿不用...见: http: ...

  8. jquery 获取绑定事件

    在1.8.0版本之前,我们要想获取某个DOM绑定的事件处理程序可以这样: 1 $.data(domObj,'events');//或者$('selector').data('events') 而从1. ...

  9. 高效学习Oracle的方法论

    Oracle的很多经验并不是来自工业环境.很多问题和经验都可以从自己的测试里积累        实验要做,但也要想!        那思维的起点是什么?        以下是我的看法.或者有些不合理: ...

  10. mof提权原理及其过程

    mof提权的原理: mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式"其作用是每隔五秒就 ...