.net将List序列转为Json字符串
将List类型转化为Json,是我们平常开发时最常见的了。在使用中,有很多种方法,也可以使用。
第一种 第三方组件:Newtonsoft.Json.dll
//转化成Json
Newtonsoft.Json.JsonConvert.SerializeObject(obj); //反序列化
Newtonsoft.Json.JsonConvert.DeserializeObject<T>(string);
注意:版本更新时,可能会遇到问题:

因为引用出了问题,在程序集里面找不到的Newtonsoft.Json,所以它就拿从系统盘里面预装的旧版的来用。
结果就报版本错误了。
web.config 里面注明了
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
就要求用6.*版本的了。
这时,可以删除bin文件夹里面的Newtonsoft.Json,重新用nuget 引用一遍。
也用记事本打开项目文件(*.csproj)可以找到在这个文件中,有两处Newtonsoft.Json的引用,删掉老版本的引用就好了。
网上看了下,具体问题的可能的三个原因:
第一,引用不存在vs自动找到旧版的。
第二,web.config配置的版本号跟实际想要版本号不对。
第三,bin文件夹里面的根本就是旧版的。
第二种,微软自带的组件:System.Runtime.Serialization.dll
使用方式,新建个工具类,然后调用:

public class SerializerHelper
{ /// <summary>
/// JSON序列化
/// </summary>
public static string JsonSerializer<T>(T t)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream())
{
ser.WriteObject(ms, t);
return Encoding.UTF8.GetString(ms.ToArray());
}
} /// <summary>
/// JSON反序列化
/// </summary>
public static T JsonDeserialize<T>(string jsonString)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
return (T)ser.ReadObject(ms);
}
} }

第三种:微软自带组件System.Web.Extensions.dll(JavaScriptSerializer 类)
属性:
MaxJsonLength 获取或设置 JavaScriptSerializer 类接受的 JSON 字符串的最大长度。
RecursionLimit 获取或设置用于约束要处理的对象级别的数目的限制。
方法:
ConvertToType<(Of <(T>)>) 将给定对象转换为指定类型。
Deserialize<(Of <(T>)>) 将指定的 JSON 字符串转换为 T 类型的对象。
DeserializeObject 将指定的 JSON 字符串转换为对象图。
RegisterConverters 使用 JavaScriptSerializer 实例注册自定义转换器。
Serialize 已重载。 将对象转换为 JSON 字符串。
注意:
DateTime 类型 Date 对象,在 JSON 中表示为“\/Date(刻度数)\/”。刻度数是一个正的或负的长值,该值指示从 UTC 1970 年 1 月 1 日午夜开始已经过的刻度数(毫秒)。
MaxJsonLength限制了被反序列化和序列化生成的JSON字符串的长度,默认值位为2097152(0x200000,等同于 4 MB 的 Unicode 字符串数据)。
RecursionLimit用于设置被序列化对象和反序列化生成对象结构的允许的层级数,默认值为100。
第四种:MVC 的Controller 中的 return Json(Obj,JsonRequestBehavior.AllowGet)
System.Web.Mvc.JsonResult 对象,该对象使用指定 JSON 请求行为将指定对象序列化为 JavaScript 对象表示法。
出于对安全的考虑,JsonResult在默认的情况下不能作为对HTTP-GET请求的响应,在这种情况下并会直接抛出一个InvalidOperationException异常。我们可以通过它的JsonRequestBehavior属性开启JsonResult对HTTP-GET请求的支持。该属性类型号
为JsonRequestBehavior枚举,两个枚举项AllowGet和DenyGet分别表示允许/拒绝支持对HTTP-GET请求的响应。JsonResult的JsonRequestBehavior属性在初始化的时候被设置为DenyGet。
但是他有一个致命的缺陷,大小不好设置,当obj足够大时,就会报错:使用JSON JavaScriptSerializer进行序列化或反序列化时出错。字符串的长度超过了为maxJsonLength属性设置的值。
解决办法:.net 使用Json(),maxJsonLength属性设置的值问题 其实最佳的方案就是使用了上面的第三种 JavaScriptSerializer 类的MaxJsonLength 属性。

public ActionResult GetLargeJsonResult()
{
return new ContentResult
{
Content = new JavaScriptSerializer { MaxJsonLength = Int32.MaxValue }.Serialize(listResult),
ContentType = "application/json"
};
}

转载:https://www.cnblogs.com/ericli-ericli/p/5857407.html
.net将List序列转为Json字符串的更多相关文章
- 使用DataContractJsonSerializer类将类型实例序列化为JSON字符串和反序列化为实例对象                                                       分类:            JSON             前端             2014-11-10 10:20    97人阅读    评论(1)    收藏
		
一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大 ...
 - C# 实体转为json字符串
		
C# 实体转为json字符串 Catalog cata = new Catalog(); cata.C_platformid = 0; cata.C_isnav = 0; cata.C_isvalid ...
 - C#将对象序列化成JSON字符串
		
C#将对象序列化成JSON字符串 public string GetJsonString() { List<Product> products = new List<Product& ...
 - Jackson-将对象转为Json字符串
		
SpringMVC-处理JSON 1.引入jackson依赖 <properties> <jackson.version>1.9.13</jackson.version& ...
 - 使用 EntityFramework后把一个对象序列化成json字符串引起循环引用的问题
		
先看一个T4模板生成的model实体类 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:卷猫 链接:http://anneke.cn/ArticleInfo/Detial ...
 - fastjson将java list转为json字符串
		
1.直接用fastjson的静态方法string JSON.toJSONString(list)方法就行,JSON.toJSONString(list)将java list转为json字符串. 2.t ...
 - java对象转为json字符串
		
1.使用fastjson开源json工具类库 2.java类未添加get()和set()方法,java对象初始化时,使用fastjson解析,得到的json字符串有时为空{} 3.Java对象转为js ...
 - .net 将List序列化成Json字符串
		
将List类型转化为Json,是我们平常开发时最常见的了.在使用中,有很多种方法,也可以使用. 第一种 第三方组件:Newtonsoft.Json.dll //转化成Json Newtonsoft.J ...
 - fastjson对象转为json字符串日期格式变为时间戳问题
		
今天尝试将map集合转为json对象时遇到一个问题.map中的value为日期格式如"2019-03-01",在使用JSONObject.toJSON(map).toString( ...
 
随机推荐
- gogland golang 颜色&字体 colors&font 配置文件
			
<scheme name="Ya" version="142" parent_scheme="Darcula"> <opt ...
 - CentOS 7安装GitLab、汉化、配置邮件发送
			
1.更换国内yum源 1.1 备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 1.2 ...
 - 负载均衡-会话保持,session同步(转载)
			
一,什么负载均衡一个新网站是不要做负载均衡的,因为访问量不大,流量也不大,所以没有必要搞这些东西.但是随着网站访问量和流量的快速增长,单台服务器受自身硬件条件的限制,很难承受这么大的访问量.在这种情况 ...
 - delphi android 录像
			
delphi xe系列自带的控件都无法保存录像,经网友帮忙,昨天终于实现了录像功能(但有个问题是录像时无画面显示),程序主要使用了JMediaRecorder,MediaRecorder的使用方法可参 ...
 - delphi中sql实现while循环插入,不存在则插入
			
' declare @i int; '+ ' set @i=0; '+ ' while @i<4 '+ ' begin '+ ' insert into NBCommission(Type,It ...
 - Android-bindService远程服务(Aidl)-初步
			
之前上一篇讲解到本地服务,本地服务只能在自身APP中Activity访问Service,调用Service里面到方法等操作 如果想A应用访问B应用里面的方法,属于跨进程调用,如果Android不特供这 ...
 - 【Newtonsoft.Json.dll】操作简单JSON数据
			
{ //json数据 string json = "{\"name\":\"张三\",\"sex\":\"男\" ...
 - C# 等待框
			
今天发现dev控件自带了等待框,调用方便,而且不会阻塞主线程. 拉一个窗体,界面上放两个按钮,显示等待框,隐藏. <Window x:Class="WaitDialogTest.Mai ...
 - c# 判断两个集合是否有交集
			
/// <summary> /// 判断是否有交集 /// </summary> /// <typeparam name="T"></ty ...
 - Android应用-底部导航栏的使用
			
目录 1. 设计底部导航栏页面 1.1. 创建必须的文件夹 1.2. 设计主页面 2. 设计逻辑函数 3. 项目展示 底部导航栏是基于Bottom Navigation Bar 插件使用的 这个插件包 ...