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

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

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

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

android list转json字符串数组 javalist转json字符串_字符串

因为引用出了问题,在程序集里面找不到的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)>) 将给定对象换为指定类型。

Deserialize)>) 将指定的 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"
};
}

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

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

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

HTML

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

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

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

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

jackson2&period;8&period;4java对象序列化成json字符串格式化时间

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

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

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

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