利用Newtonsoft.Json实现Json序列化与反序列化
2024-10-11 01:00:11
在项目中用到了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;
}
最新文章
- SQL server学习
- Linux下Source Insight的安装和汉化
- Python常见的运行错误
- Sqlserver 存储过程中结合事务的代码
- [原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter
- Parallel多线程
- POC- Proof of Cocept -- 概念验证
- C#读取XML方式
- BZOJ_2946_[Poi2000]公共串_后缀数组+二分答案
- [工作积累] UE4 并行渲染的同步 - Sync between FParallelCommandListSet &; FRHICommandListImmediate calls
- python 的基础 学习 第三天 编码的初始
- 题解-CodeForces835F Roads in the Kingdom
- [C语言]在命令行编译执行程序
- angular ng-bind-html
- CHAPTER 40 Science in Our Digital Age 第40章 我们数字时代的科学
- 作业6 团队项目之需求 (NABCD模型)
- 【spring学习笔记一】Ioc控制反转
- pymysql模块用法
- 使用jdbc的方式访问kylin cube的数据
- eclipse启动一闪而退