利用Newtonsoft.Json实现Json序列化与反序列化
在项目中用到了Newtonsoft.Json来实现序列化和反序列化,在这里写下实现代码。
1、创建类用于排除不序列化的属性
public class ExcludePropertiesContractResolver : DefaultContractResolver
{
IEnumerable<string> lstExclude; public ExcludePropertiesContractResolver(IEnumerable<string> excludedProperties)
{
lstExclude = excludedProperties;
} protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
return base.CreateProperties(type, memberSerialization).ToList().FindAll(p => !lstExclude.Contains(p.PropertyName));
}
}
2、序列化方法
以下分别是将对象、DataTable、集合序列化为Json字符串的方法:
/// <summary>
/// T对象转换成json字符串
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string GetJsonString<T>(T obj, params string[] ignoreFields)
{
IsoDateTimeConverter iso = new IsoDateTimeConverter();
iso.DateTimeFormat = "yyyy-MM-ddTHH:mm:ss";
iso.DateTimeStyles = System.Globalization.DateTimeStyles.AssumeLocal;
string jsonStr = string.Empty;
JsonSerializerSettings js = new JsonSerializerSettings();
if (ignoreFields != null && ignoreFields.Length > 0)
{
List<string> ignoreList = ignoreFields.ToList();
js.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
js.ContractResolver = new ExcludePropertiesContractResolver(ignoreList);
}
js.Converters.Add(iso);
jsonStr = JsonConvert.SerializeObject(obj, Formatting.Indented, js);
return jsonStr;
} /// <summary>
/// DataTable对象转换成json字符串
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string GetJsonString(DataTable dt, params string[] ignoreFields)
{
IsoDateTimeConverter iso = new IsoDateTimeConverter();
iso.DateTimeFormat = "yyyy-MM-ddTHH:mm:ss";
iso.DateTimeStyles = System.Globalization.DateTimeStyles.AssumeLocal;
string jsonStr = string.Empty;
JsonSerializerSettings js = new JsonSerializerSettings();
if (ignoreFields != null && ignoreFields.Length > 0)
{
List<string> ignoreList = ignoreFields.ToList();
js.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
js.ContractResolver = new ExcludePropertiesContractResolver(ignoreList);
}
js.Converters.Add(new DataTableConverter());
js.Converters.Add(iso);
jsonStr = JsonConvert.SerializeObject(dt, Formatting.Indented,js);
return jsonStr;
} /// <summary>
/// List对象转换成json字符串
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string GetJsonString<T>(List<T> list, params string[] ignoreFields)
{
IsoDateTimeConverter iso = new IsoDateTimeConverter();
iso.DateTimeFormat = "yyyy-MM-ddTHH:mm:ss";
iso.DateTimeStyles = System.Globalization.DateTimeStyles.AssumeLocal;
string jsonStr = string.Empty;
JsonSerializerSettings js = new JsonSerializerSettings();
if (ignoreFields != null && ignoreFields.Length > 0)
{
List<string> ignoreList = ignoreFields.ToList();
js.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
js.ContractResolver = new ExcludePropertiesContractResolver(ignoreList);
}
js.Converters.Add(iso);
jsonStr = JsonConvert.SerializeObject(list, Formatting.Indented, js);
return jsonStr;
}
3、反序列化
以下是将Json字符串反序列化为对象、集合的方法。
/// <summary>
/// json字符串转换成T对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonStr"></param>
/// <returns></returns>
public static T GetObjectByJsonString<T>(string jsonStr)
{
T obj = JsonConvert.DeserializeObject<T>(jsonStr);
return obj;
} /// <summary>
/// json字符串转换成List对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonStr"></param>
/// <returns></returns>
public static List<T> GetListByJsonString<T>(string jsonStr)
{
List<T> list = JsonConvert.DeserializeObject<List<T>>(jsonStr);
return list;
}
利用Newtonsoft.Json实现Json序列化与反序列化的更多相关文章
- 利用JavaScriptSerializer类 进行Json对象的序列化和反序列化和过滤
项目下载:JavaScriptSerializer_对JSON对象序列化与反序列化及过滤器 利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化 1. 首 ...
- .net core Json字符串的序列化和反序列化通用类源码,并模拟了10万数据对比DataContractJsonSerializer和Newtonsoft性能
我们在开发中Json传输数据日益普遍,有很多关于Json字符串的序列化和反序列化的文章大多都告诉你怎么用,但是却不会告诉你用什么更高效.因为有太多选择,人们往往会陷入选择难题. 相比.NET Fram ...
- Json数据的序列化与反序列化的三种经常用法介绍
下面内容是本作者从官网中看对应的教程后所做的demo.其体现了作者对相关知识点的个人理解..作者才疏学浅,难免会有理解不到位的地方.. 还请各位读者批判性对待... 本文主要介绍在Json数据的序列化 ...
- 【转】在C#中使用Json.Net进行序列化和反序列化及定制化
作者:Minotauros 原文地址:在C#中使用Json.Net进行序列化和反序列化及定制化 序列化(Serialize)是将对象转换成字节流,并将其用于存储或传输的过程,主要用途是保存对象的状态, ...
- JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength 属性设置的值
在.net mvc的controller中,方法返回JsonResult,一般我们这么写: [HttpPost] public JsonResult QueryFeature(string u ...
- .net MVC 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错,字符串的长度超过了为 maxJsonLength 属性设置的值
在.net mvc的controller中,方法返回JsonResult,一般我们这么写: [HttpPost] public JsonResult QueryFeature(string url, ...
- 使用JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength属性
"/"应用程序中的服务器错误.使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错.字符串的长度超过了为 maxJsonLength 属性设置的值. ...
- 对 JSON 数据进行序列化和反序列化
如何:对 JSON 数据进行序列化和反序列化 2017/03/30 作者 JSON(JavaScript 对象符号)是一种高效的数据编码格式,可用于在客户端浏览器和支持 AJAX 的 Web 服务之间 ...
- 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错
如题 报错提示: 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错.字符串的长度超过了为 maxJsonLength 属性设置的值.","Sta ...
- ng json格式的序列化和反序列化
ng中自带方法 angular.toJson 序列化angular.fromJson 反序列化 结果: 代码: <!DOCTYPE html> <html ng-app=" ...
随机推荐
- (转).net Application.DoEvents()的作用
原文地址:http://blog.csdn.net/weinierbian/article/details/6231589 Application.DoEvents()的作用:处理所有的当前在消息队列 ...
- 在git上下载的Asp.Net MVC 4源码怎么编译?
以本人的下载位置为例:E:\aspnetwebstack 1.win+r 输入cmd 打开dos 界面 2.e: 回车,定位到e 盘 3.cd E:\aspnetwebstack 进入e 盘aspne ...
- jmeter随笔(11)--上传文件接口出错
点击标题下「飞测」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是我们期 ...
- oracle创建job权限
grant create job to ja_ods; grant manage scheduler to ja_ods;
- linux Apache和php配置
今天安装Apache httpd web服务器,安装过程分为三部分: (1)./configure (2)make (3)make install (需要root权限) 我的apache 安装在/ho ...
- ionic ngcordova map 地圖
幾乎每個APP都會有地圖 所以在這裏記錄一下 1.在index.html 中 <script src="https://maps.googleapis.com/maps/api/js? ...
- PAT1007
#include<stdio.h>#include<vector>#include<algorithm>using namespace std; int main( ...
- JAVA嵌入运行Groovy脚本
摘自: http://shift-alt-ctrl.iteye.com/blog/1938238 . 最近设计一个数据统计系统,系统中上百种数据统计维度,而且这些数据统计的指标可能随时会调整.如果基于 ...
- Solaris磁盘设备
Solaris的磁盘分区称为分片(slice),在磁盘上,一个环形就是一个分区分片的命名通常是c#t#d#s#c:Controller number,控制器标号,c0就是第一个控制器t:Taget n ...
- vsftp快速配置
/etc/vsftpd/vsftpd.confanonymous_enable=YESlocal_enable=YESwrite_enable=YESlocal_umask=022dirmessage ...