将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"
};
}

.net 将List序列化成Json字符串的更多相关文章

  1. C#将对象序列化成JSON字符串

    C#将对象序列化成JSON字符串 public string GetJsonString() { List<Product> products = new List<Product& ...

  2. 使用 EntityFramework后把一个对象序列化成json字符串引起循环引用的问题

    先看一个T4模板生成的model实体类 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:卷猫 链接:http://anneke.cn/ArticleInfo/Detial ...

  3. SpringMVC将表单对象序列化成Json字符串提交,以List接收

    出自:http://blog.csdn.net/m0_37595732/article/details/71440853 HTML <%@ page language="java&qu ...

  4. 对象序列化成Json字符串 及 反序列化成对象

    一. public static string JsonSerializer<T>(T t)        {            DataContractJsonSerializer ...

  5. Spring Boot Cache配置 序列化成JSON字符串

    当我们使用@Cacheable注解的时候会将返回的对象缓存起来,我们会发现默认缓存的值是二进制的,不方便查看,为此我们自定义序列化配置,改成JSON格式的 配置如下: pom.xml <?xml ...

  6. jackson2.8.4java对象序列化成json字符串格式化时间

    public class User {private int id; private Date birthday; private double money; private String name; ...

  7. 将序列化成json格式的日期(毫秒数)转成日期格式

    <script> $(function () { loadInfo(); }) function loadInfo() { $.post("InfoList.ashx" ...

  8. 使用DataContractJsonSerializer类将类型实例序列化为JSON字符串和反序列化为实例对象 分类: JSON 前端 2014-11-10 10:20 97人阅读 评论(1) 收藏

    一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大 ...

  9. IOS开发之把 Array 和 Dictionaries 序列化成 JSON 对象

    1 前言通过 NSJSONSerialization 这个类的 dataWithJSONObject:options:error:方法来实现,Array 和 dictionary 序列化成 JSON ...

随机推荐

  1. 用微信小程序开发的Canvas绘制可配置的转盘抽奖

    使用https://github.com/givebest/GB-canvas-turntable代码移植过而来. 其它 微信小程序感觉是个半成品,代码移植过程比较繁琐麻烦.canvas API 部分 ...

  2. CAD调试时抛出“正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码”异常的解决方法

    这些天重装了电脑Win10系统,安装了CAD2012和VS2012,准备进行软件开发.在调试程序的时候,CAD没有进入界面就抛出 “正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain ...

  3. 另类的表单数据"序列化"

    背景:最近在做项目时,由于编辑页面需要提交的数据量有些多,而且在提交前还需要做一些逻辑处理,所以如果按照正常的方式,一个个的获取值然后拼接json对象传到后台的话相对工作量较大,而且容易出错,后期的维 ...

  4. POOL_TYPE enumeration

    typedef enum _POOL_TYPE { NonPagedPool, NonPagedPoolExecute                   = NonPagedPool, PagedP ...

  5. [实践] Android5.1.1源码 - 在Framework中添加自定义系统服务

    前言 本文的方法要修改Android源码.但只要将系统服务写出来,也可以注入system_server进程将系统服务加载到system_server中. 步骤 1. 添加一个aidl文件,我将aidl ...

  6. 剑指Offer面试题:26.字符串的排列

    一.题目:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba. 二 ...

  7. 【译】.NET中六个重要的概念:栈、堆、值类型、引用类型、装箱和拆箱

    为何要翻译 一来是为了感受国外优秀技术社区知名博主的高质量文章,二来是为了复习对.NET技术的基础拾遗达到温故知新的效果,最后也是为了锻炼一下自己的英文读写能力.因为是首次翻译英文文章(哎,原谅我这个 ...

  8. [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序

    [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序 本节导读: 本节主要说明使用异步进行程序设计的优缺点及如何通过异步编程. 使用 ...

  9. 备忘-Android ViewPager 与Gallery滑动冲突解决方法

    解决方法,重新定义gallery,禁止触发pager的触摸事件 1 public class UserGallery extends Gallery implements OnGestureListe ...

  10. 几个毫无节操纯属恶搞的JavaScript插件

    fartscroll.js,为放屁而生 你知道么,有了这个js库,你的页面就可以——————————放屁勒! 打开下面的演示地址,然后滚动页面. 在线演示:http://theonion.github ...