博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net将List序列转为Json字符串
阅读量:6931 次
发布时间:2019-06-27

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

将List类型转化为Json,是我们平常开发时最常见的了。在使用中,有很多种方法,也可以使用。

第一种 第三方组件:Newtonsoft.Json.dll

//转化成JsonNewtonsoft.Json.JsonConvert.SerializeObject(obj);//反序列化Newtonsoft.Json.JsonConvert.DeserializeObject
(string);

注意:版本更新时,可能会遇到问题:

因为引用出了问题,在程序集里面找不到的Newtonsoft.Json,所以它就拿从系统盘里面预装的旧版的来用。

结果就报版本错误了。
web.config 里面注明了  

就要求用6.*版本的了。

这时,可以删除bin文件夹里面的Newtonsoft.Json,重新用nuget 引用一遍。

也用记事本打开项目文件(*.csproj)可以找到在这个文件中,有两处Newtonsoft.Json的引用,删掉老版本的引用就好了。

网上看了下,具体问题的可能的三个原因:
第一,引用不存在vs自动找到旧版的。
第二,web.config配置的版本号跟实际想要版本号不对。
第三,bin文件夹里面的根本就是旧版的。

第二种,微软自带的组件:System.Runtime.Serialization.dll

使用方式,新建个工具类,然后调用:

public class SerializerHelper    {        ///         /// JSON序列化        ///         public static string JsonSerializer
(T t) { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); using (MemoryStream ms = new MemoryStream()) { ser.WriteObject(ms, t); return Encoding.UTF8.GetString(ms.ToArray()); } } ///
/// JSON反序列化 /// public static T JsonDeserialize
(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

转载于:https://www.cnblogs.com/yuanmo/p/10045467.html

你可能感兴趣的文章
版本中文[gcc]: unknown (64-bit) [FAIL]
查看>>
同事的Excel中的图片突然不能选择
查看>>
PL/pgSQL学习笔记之一
查看>>
【转】如何从零开始学会 Ruby on Rails?
查看>>
hdu 2527:Safe Or Unsafe(数据结构,哈夫曼树,求WPL)
查看>>
js计算两个日期相隔几小时几分钟?
查看>>
幻4游戏开发_2_板机
查看>>
ThinkPHP v5 新漏洞攻击案例首曝光,阿里云已可告警并拦截
查看>>
微服务架构方案 ZeroC IceGrid
查看>>
浅谈前端响应式设计(一)
查看>>
Log4j各级别日志重复打印的问题
查看>>
flask文件上传
查看>>
[Python3网络爬虫开发实战] 7-动态渲染页面爬取-2-Splash的使用
查看>>
BSYAlertBox
查看>>
Camera开发系列之四-使用MediaMuxer封装编码后的音视频到mp4容器
查看>>
NEO 客户端插件
查看>>
React as a UI Runtime(二、React元素和入口)
查看>>
Spring校验@RequestParams和@PathVariables参数
查看>>
安装lnmp 时如何修改数据库数据存储地址及默认访问地址
查看>>
React学习笔记2---生命周期
查看>>