JsonHelp
using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Reflection; using System.Text; using System.Linq; namespace Common { /// <summary> /// Json帮助类 /// </summary> public static partial class JsonHelp { /// <summary> /// Json字符串转换为实体集合 /// </summary> /// <typeparam name="T">实体类</typeparam> /// <param name="json">Json字符串</param> /// <returns>实体集合</returns> public static T ConvertJsonToEntity<T>(string json) where T : class { return JsonConvert.DeserializeObject<T>(json); } /// <summary> /// Json字符串转换为实体集合 /// </summary> /// <typeparam name="T">实体类</typeparam> /// <param name="json">Json字符串</param> /// <returns>added对应新增实体集合;deleted对应删除实体集合;modified对应更新实体集合</returns> public static Dictionary<string, IEnumerable<T>> ConvertJsonToEntities<T>(string json) where T : new() { Dictionary<string, IEnumerable<T>> _return = new Dictionary<string, IEnumerable<T>>(); IList<T> added = new List<T>(); IList<T> deleted = new List<T>(); IList<T> modified = new List<T>(); ArrayList _c = MiniUIJson.Decode(json) as ArrayList; foreach (Hashtable row in _c) { T t = new T(); PropertyInfo[] p = typeof(T).GetProperties(); foreach (var item in p) { string _temp = (row[item.Name] ?? string.Empty).ToString(); if (item.PropertyType.ToString().Contains(@"System.Int32")) { if (_temp == string.Empty) continue; item.SetValue(t, Convert.ToInt32(_temp)); } else if (item.PropertyType.ToString().Contains(@"System.Int16")) { if (_temp == string.Empty) continue; item.SetValue(t, Convert.ToInt16(_temp)); } else if (item.PropertyType.ToString().Contains(@"System.Byte[]")) { if (_temp == string.Empty) continue; item.SetValue(t, Encoding.Default.GetBytes(_temp)); } else if (item.PropertyType.ToString().Contains(@"System.Byte")) { if (_temp == string.Empty) continue; item.SetValue(t, Convert.ToByte(_temp)); } else if (item.PropertyType.ToString().Contains(@"System.Decimal")) { if (_temp == string.Empty) continue; if (_temp == "null") continue; item.SetValue(t, Convert.ToDecimal(_temp)); } else if (item.PropertyType.ToString().Contains(@"System.DateTime")) { if (_temp == string.Empty) continue; item.SetValue(t, Convert.ToDateTime(_temp)); } else if (item.PropertyType.ToString().Contains(@"System.Boolean")) { if (_temp == string.Empty) continue; item.SetValue(t, Convert.ToBoolean(_temp)); } else if (item.PropertyType.ToString().Contains(@"System.Double")) { if (_temp == string.Empty) continue; item.SetValue(t, Convert.ToDouble(_temp)); } else if (item.PropertyType.ToString().Contains(@"CPPEI.Model")) { continue; } else if (item.PropertyType.ToString().Contains(@"System.Guid")) { if (_temp == string.Empty) continue; item.SetValue(t, Guid.Parse(_temp)); } else { item.SetValue(t, Convert.ChangeType(row[item.Name], item.PropertyType)); } } String state = (row["_state"] ?? string.Empty).ToString(); switch (state.ToLower()) { case "added": added.Add(t); break; case "removed": deleted.Add(t); break; case "deleted": deleted.Add(t); break; case "": case "modified": modified.Add(t); break; default: break; } } _return.Add("added", added); _return.Add("deleted", deleted); _return.Add("modified", modified); return _return; } /// <summary> /// Json字符串转换为实体集合 /// </summary> /// <typeparam name="T">实体类</typeparam> /// <param name="_json">Json字符串</param> /// <returns>added对应新增实体集合;deleted对应删除实体集合;modified对应更新实体集合</returns> public static Dictionary<string, IEnumerable<T>> JsonToEntities<T>(string _json) where T : new() { if (string.IsNullOrWhiteSpace(_json)) return null; Dictionary<string, IEnumerable<T>> _list = new Dictionary<string, IEnumerable<T>>(); IList<T> added = new List<T>(); IList<T> deleted = new List<T>(); IList<T> modified = new List<T>(); object _r = JsonConvert.DeserializeObject(_json); if (_r is IEnumerable<JToken>) { foreach (IEnumerable<KeyValuePair<string, JToken>> _i in _r as IEnumerable<JToken>) { Hashtable ht = new Hashtable(); foreach (KeyValuePair<string, JToken> _k in _i) { #region 循环属性 if (typeof(JValue) == _k.Value.GetType()) { object _m = (_k.Value as JValue).Value; if (_m != null) { //判断是否符合2010-09-02T10:00:00的格式 string s = _m.ToString(); && s[] == ] == ] == ':') { ht[_k.Key] = Convert.ToDateTime(s); } else { ht[_k.Key] = s; } } } #endregion } T t = new T(); foreach (var item in typeof(T).GetProperties()) { if (!item.GetGetMethod().IsVirtual && ht[item.Name] != null) { if (ht[item.Name].ToString() == string.Empty && item.PropertyType.Name != @"String") { string[] _ijk = { "Int32", "Int16", "Byte", "Decimal", "Double", "Single" }; ].Name)) { ht[item.Name] = ; } } item.SetValue(t, ChangeType(ht[item.Name], item.PropertyType)); } } switch ((ht["_state"] ?? string.Empty).ToString()) { case "added": added.Add(t); break; case "removed": case "deleted": deleted.Add(t); break; case "": case "modified": modified.Add(t); break; default: break; } } } _list.Add("added", added); _list.Add("deleted", deleted); _list.Add("modified", modified); return _list; } /// <summary> /// 输入JSON,返回HASH集合 /// </summary> /// <param name="_json">json字符串</param> /// <returns>参数集合</returns> public static IEnumerable<Hashtable> JsonToIEnumerable(string _json) { if (string.IsNullOrWhiteSpace(_json)) return null; IList<Hashtable> _list = new List<Hashtable>(); object _r = JsonConvert.DeserializeObject(_json); if (_r is IEnumerable<JToken>) { foreach (IEnumerable<KeyValuePair<string, JToken>> _i in _r as IEnumerable<JToken>) { Hashtable ht = new Hashtable(); foreach (KeyValuePair<string, JToken> _k in _i) { #region 循环属性 if (typeof(JValue) == _k.Value.GetType()) { object _m = (_k.Value as JValue).Value; if (_m != null) { //判断是否符合2010-09-02T10:00:00的格式 string s = _m.ToString(); && s[] == ] == ] == ':') { ht[_k.Key] = Convert.ToDateTime(s); } else { ht[_k.Key] = s; } } } #endregion } _list.Add(ht); } } return _list; } /// <summary> /// 输入JSON,返回字典 /// </summary> /// <param name="_json">json字符串</param> /// <returns>参数集合</returns> public static Dictionary<string, string> JsonToDictionary(string _json) { if (string.IsNullOrWhiteSpace(_json)) return null; Dictionary<string, string> _list = new Dictionary<string, string>(); object _r = JsonConvert.DeserializeObject(_json); if (_r is IEnumerable<JToken>) { foreach (IEnumerable<KeyValuePair<string, JToken>> _i in _r as IEnumerable<JToken>) { foreach (KeyValuePair<string, JToken> _k in _i) { #region 循环属性 if (typeof(JValue) == _k.Value.GetType()) { object _m = (_k.Value as JValue).Value; if (_m != null) { //判断是否符合2010-09-02T10:00:00的格式 string s = _m.ToString(); && s[] == ] == ] == ':') { _list.Add(_k.Key, Convert.ToDateTime(s).ToString()); } else { _list.Add(_k.Key, _k.Value.ToString()); } } } #endregion } } } return _list; } /// <summary> /// 输入JSON,返回字典 /// </summary> /// <param name="_json">json字符串</param> /// <returns>参数集合</returns> public static IEnumerable<KeyValuePair<string, string>> JsonToIEDictionary(string _json) { if (string.IsNullOrWhiteSpace(_json)) return null; IList<KeyValuePair<string, string>> _list = new List<KeyValuePair<string, string>>(); object _r = JsonConvert.DeserializeObject(_json); if (_r is IEnumerable<JToken>) { foreach (IEnumerable<KeyValuePair<string, JToken>> _i in _r as IEnumerable<JToken>) { foreach (KeyValuePair<string, JToken> _k in _i) { #region 循环属性 if (typeof(JValue) == _k.Value.GetType()) { object _m = (_k.Value as JValue).Value; if (_m != null) { //判断是否符合2010-09-02T10:00:00的格式 string s = _m.ToString(); && s[] == ] == ] == ':') { _list.Add(new KeyValuePair<string, string>(_k.Key, Convert.ToDateTime(s).ToString())); } else { _list.Add(new KeyValuePair<string, string>(_k.Key, _k.Value.ToString())); } } } #endregion } } } return _list; } /// <summary> /// 实体对象转换为字符串 /// </summary> /// <param name="o">实体对象</param> /// <returns>字符串</returns> public static string EntitiesToString(object o) { if (o == null || o.ToString() == "null") return null; if (o != null && (o.GetType() == typeof(String) || o.GetType() == typeof(string))) { return o.ToString(); } IsoDateTimeConverter dt = new IsoDateTimeConverter(); dt.DateTimeFormat = @"yyyy'-'MM'-'dd'T'HH':'mm':'ss"; return JsonConvert.SerializeObject(o, dt); } /// <summary> /// 类型转换 /// </summary> /// <param name="value">数据</param> /// <param name="targetType">类型</param> /// <returns>数据类型</returns> private static Object ChangeType(object value, Type targetType) { Type convertType = targetType; if (targetType.IsGenericType && targetType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) { NullableConverter nullableConverter = new NullableConverter(targetType); convertType = nullableConverter.UnderlyingType; } return Convert.ChangeType(value, convertType); } /// <summary> /// 类型转换 /// </summary> /// <typeparam name="T">目标类型</typeparam> /// <param name="convertibleValue">数据</param> /// <returns>返回类型</returns> public static T ConvertTo<T>(this IConvertible convertibleValue) { if (string.IsNullOrEmpty(convertibleValue.ToString())) { return default(T); } if (!typeof(T).IsGenericType) { return (T)Convert.ChangeType(convertibleValue, typeof(T)); } else { Type genericTypeDefinition = typeof(T).GetGenericTypeDefinition(); if (genericTypeDefinition == typeof(Nullable<>)) { return (T)Convert.ChangeType(convertibleValue, Nullable.GetUnderlyingType(typeof(T))); } } return default(T); } /// <summary> /// Hashtable转换为实体 /// </summary> /// <typeparam name="T">实体类</typeparam> /// <param name="t">实体类对象</param> /// <param name="row">Hashtable数据源</param> public static void ConvertHashToEntity<T>(T t, Hashtable row) where T : class { PropertyInfo[] p = typeof(T).GetProperties(); foreach (var item in p) { item.SetValue(t, ChangeType(row[item.Name], item.PropertyType), null); } } } }
JsonHelp的更多相关文章
- 通用JSONHelp 的通用的封装
1. 最近项目已经上线了 ,闲暇了几天 想将JSON 的序列化 以及反序列化进行重新的封装一下本人定义为JSONHelp,虽然Microsoft 已经做的很好了.但是我想封装一套为自己开发的项目使用 ...
- C# 对象数据转换Json帮助类 JsonHelp
C# 对象数据转换Json帮助类 JsonHelp using System; using System.Data; using System.Configuration; using System. ...
- JSONHelp json解析成类,类解析成string
using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization. ...
- Silverlight 使用DataContractJsonSerializer序列化与反序列化 Json
环境说明:Silverlight 5.1,.Net Framework 4.0 1.添加引用System.ServiceModel.Web.dll. 因为 System.Runtime.Seria ...
- .net 实体类与json转换(.net自带类库实现)更新
上一篇文章中写到在.net中实体类跟json格式的相互转换,今天在做具体转换时候,发现之前版本的jsonhelp对于日期类型的转换不全面.之前版本的jsonhelp中从实体类转换成json格式时候,将 ...
- .net 实体类与json转换(.net自带类库实现)
注意要点. 1.jsonhelp编写时候添加的引用.System.Runtime.Serialization.Json; 2.实体类需声明为public jsonhelp代码: using Syste ...
- C#中JSON序列化和反序列化
有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...
- 关于asp.net 开发的小技巧—让传值对象化
前端:前端 定义一个对象, 传值时实例此对象,序列化成json字符串 代码如下: 定义js对象: ///定义一个查询条件对象 var SearchCondition=function(){ this. ...
- 微信授权步骤与详解 -- c#篇
微信授权步骤与详解 -- c#篇 注:这里不涉及界面操作,只介绍代码操作. 1.基本原理如下: 从图上所知,第一步用户访问我们的网页,第二步我们后台跳转到微信授权页面,第三步用户点击授权,第四步微信重 ...
随机推荐
- Codeforces 809D. Hitchhiking in the Baltic States
Description 给出 \(n\) 个数 \(a_i\),每一个数有一个取值 \([l_i,r_i]\) ,你来确定每一个数,使得 \(LIS\) 最大 题面 Solution 按照平时做法,设 ...
- String.Compare 方法 (String, Int32, String, Int32, Int32)
String.Compare 方法 (String, Int32, String, Int32, Int32) 对两个指定的 String 对象的子字符串进行比较,并返回一个指示二者在排序顺序中的相对 ...
- jquery 使用整理机制
短路表达式 与 多重短路表达式 短路表达式这个应该人所皆知了.在 jQuery 中,大量的使用了短路表达式与多重短路表达式. 短路表达式:作为"&&"和" ...
- Ajax知识点复习
1. ajax是什么? * asynchronous javascript and xml:异步的js和xml * 它能使用js访问服务器,而且是异步访问! * 服务器给客户端的响应一般是整个页面,一 ...
- 读EntityFramework.DynamicFilters源码_心得_设计思想_04
前几次,我们从说明文档,示例,单元测试了解了怎么用这个动态过滤器,那么如果仅仅是为了实现目的,知道怎么用就可以完成相应的功能开发,但我还想了解的问题是 作者是怎么将动态过滤器与EF结合的 有哪些设计思 ...
- 1.JDBC基础
JDBC全称Java Database Connectivity,即Java数据库连接.(以下以MySQL为例,使用MySQL语句) Sun公司提供了标准JDBC API接口,没有实现具体类.各个数据 ...
- browserslist 目标浏览器配置表
为什么需要: 根据提供的目标浏览器的环境来,智能添加css前缀,js的polyfill垫片,来兼容旧版本浏览器,而不是一股脑的添加.避免不必要的兼容代码,以提高代码的编译质量. 共享使用browser ...
- 51Nod1601 完全图的最小生成树计数
传送门 我居然忘写题解啦!(记忆废) 不管怎么说,这题还算是一道好题啊……你觉得敦爷出的题会有水题么 …… 这题比较容易把人误导到Boruvka算法之类的东西上去(我们机房去刚D题的人一开始大多也被误 ...
- HTML颜色代码
记录十种个人比较喜欢的颜色: #19CAAD #8CC7B5 #A0EEE1 #BEE7E9 #BEEDC7 #D6D5B7 #D1BA74 #E6CEAC #ECAD9E #F46 ...
- react antd Warning: must set key for <rc-animate> children
location 有可能是一个‘’,''.split() 将输出[""],是个含有空字符串的数组,而[]是个什么都没有的数组,两者不同. code: change initialV ...