此类目的是防治序列化Json字符串时的循环引用问题-------最好解决方案
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字符串时的循环引用问题-------最好解决方案的更多相关文章
- JSON.parse 解析json字符串时,遇换行符报错
Json字符串转换成Json对象时候,有两种方式: 假设d是json字符串: 1,eval('(' + d + ')'). 2,JSON.parse(d): 但是以上方式有隐患,如果Json字符串有换 ...
- C# 把对象序列化 JSON 字符串 和把JSON字符串还原为对象
/// <summary> /// 把对象序列化 JSON 字符串 /// </summary> /// <typeparam name="T"> ...
- fastjson在将Map<Integer, String>转换成JSON字符串时,出现中文乱码问题
fastjson在将Map<Integer, String>转换成JSON字符串时,出现中文乱码问题. 先记下这个坑,改天在看看是怎么导致的,暂时通过避免使用Integer作为键(使用St ...
- JSON.parse 解析json字符串时,遇字符串换行符,解析失败
今天遇到json字符串转对象时报错了,发现有个字符串有换行符,仔细找了原因. 结果是因为JSON.parse转json字符串时遇到一些特殊字符需要先转义,如图所示 然后尝试了各路大神介绍的办法,均不适 ...
- 表单序列化json字符串和js时间格式化
js时间格式化 new Date().format("时间格式") Date.prototype.format = function(fmt) { var o = { ...
- C#序列化json属性名首字母变成小写的解决方案
原文:C#序列化json属性名首字母变成小写的解决方案 //接口返回自动转小写,容易造成前后端不一致,获取不到数据,切换成转驼峰(首字母大写)如Code/Result //在ConfigureServ ...
- Json.NET如何避免循环引用
Json.NET在将对象序列化为Json字符串的时候,如果对象有循环引用的属性或字段,那么会导致Json.NET抛出循环引用异常. 有两种方法可以解决这个问题: 1.在对象循环引用的属性上打上[Jso ...
- [MVC_Json序列化]Json字符串反序列化成C#对象
上一篇中有Json序列化相关问题得到了解决. 那么结果集为Json串时,如何将Json串转成C#对象呢? 现举例说明: -现有如下字符串数据 string k = "{\"ring ...
- C#反序列化json字符串时,提示:应为来自命名空间“”的元素“root”。。遇到名称为“”、命名空间为“”的“None”。
反序列化调用接口返回的字符串时,出现:应为来自命名空间“”的元素“root”..遇到名称为“”.命名空间为“”的“None”.,导致反序列化数据失败,这种失败并有时候并不会直接提示反序列化失败(抛异常 ...
随机推荐
- SIM800L透传模式配置
UART1_SendString("AT+CIPCLOSE=1"); //关闭连接 delay_ms(100); Second_AT_Command("AT+CIPSHU ...
- Mysql 数据库字符类型详解
MySQL 中提供了多种对字符数据的存储类型,不同的版本可能有所差异.以5.0 版本为例,MySQL 包括了CHAR.VARCHAR.BINARY.VARBINARY.BLOB.TEXT.ENUM 和 ...
- atitit.科技公司的超级武器--超级框架,到底要不要自己的框架??
atitit.科技公司的超级武器--超级框架,到底要不要自己的框架?? 我们生活的时代,,任何一个时代,总有人会以经济之类的理由劝阻人向未知领域探索,基本上,他们的理由无非几种: 1.把钱投到更需要的 ...
- atitit.提升研发管理的利器---重型框架 框架 类库的区别
atitit.提升研发管理的利器---重型框架 框架 类库的区别 1. 重型框架就是it界的重武器. 1 2. 框架 VS. 库 可视化图形化 1 3. 应用框架 1 4. 类库 2 5. 框架是不可 ...
- Windows API中的坑
本文主页链接:Windows API中的坑 ExpandEnvironmentStrings 风险: 进程会继承其父进程的环境变量.在展开如%APPDATA%等文件夹时,有可能父进程对此环境变量进行过 ...
- JSON 之GSON 解析
一. 谷歌GSON这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象.Gson支持任意复杂Java对象包括没有源代码的对象. 二.Gson解析Json ...
- JqERY
//下拉菜单样式 /*查找全部select的下拉菜单*/ function getElemsById(cot_val){ return document.getElementById(cot_val) ...
- 关于Context
Context字面意思是上下文,位于framework package的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄.很多方法需要通过 C ...
- windows下wim配置成IDE
1.配置文件_wimrc set fileencodings=utf-,ucs-bom,cp936,big5 set fileencoding=utf- source $VIMRUNTIME/vimr ...
- RSYNC在zabbix中的检查
RSYNC在zabbix中的检查 作者:高波 归档:学习笔记 2017/08/21 快捷键: Ctrl + 1 标题1 Ctrl + 2 标题2 Ctrl + 3 标题3 Ctr ...