博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
此类目的是防治序列化Json字符串时的循环引用问题-------最好解决方案
阅读量:6116 次
发布时间:2019-06-21

本文共 2988 字,大约阅读时间需要 9 分钟。

 

 

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在序列成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);
        }

 
 
 
 
 

转载地址:http://kmcka.baihongyu.com/

你可能感兴趣的文章
VC++实现非窗口类中使用定时器的方法
查看>>
.Net 中DataSet和DataTable的 区别与联系
查看>>
Windows 管理
查看>>
HDU 1619 Unidirectional TSP(单向TSP + 路径打印)
查看>>
使用avalon 实现一个订座系统
查看>>
MySQL执行外部sql脚本
查看>>
固态硬盘和机械硬盘的比较和SQLSERVER在两种硬盘上的性能差异
查看>>
java 结束程序进程 代码
查看>>
『摄影欣赏』20幅精美的秋天落叶风景欣赏【组图】
查看>>
基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)
查看>>
Java I/O 文件加锁,压缩
查看>>
网页实战开发笔记之——最全面的HTML的头部信息介绍
查看>>
IOS 消息机制(NSNotificationCenter)
查看>>
[转载] MATLAB快捷键
查看>>
VS和Eclipse的调试功能哪个更强大?
查看>>
java~springboot~gradle里的docker集成
查看>>
python装饰器1:函数装饰器详解
查看>>
杭电2054
查看>>
杭电2061
查看>>
IntelliJ IDEA常用快捷键
查看>>