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的更多相关文章

  1. 通用JSONHelp 的通用的封装

    1. 最近项目已经上线了 ,闲暇了几天 想将JSON  的序列化 以及反序列化进行重新的封装一下本人定义为JSONHelp,虽然Microsoft 已经做的很好了.但是我想封装一套为自己开发的项目使用 ...

  2. C# 对象数据转换Json帮助类 JsonHelp

    C# 对象数据转换Json帮助类 JsonHelp using System; using System.Data; using System.Configuration; using System. ...

  3. JSONHelp json解析成类,类解析成string

    using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization. ...

  4. Silverlight 使用DataContractJsonSerializer序列化与反序列化 Json

    环境说明:Silverlight 5.1,.Net Framework  ​4.0 1.添加引用System.ServiceModel.Web.dll. 因为 System.Runtime.Seria ...

  5. .net 实体类与json转换(.net自带类库实现)更新

    上一篇文章中写到在.net中实体类跟json格式的相互转换,今天在做具体转换时候,发现之前版本的jsonhelp对于日期类型的转换不全面.之前版本的jsonhelp中从实体类转换成json格式时候,将 ...

  6. .net 实体类与json转换(.net自带类库实现)

    注意要点. 1.jsonhelp编写时候添加的引用.System.Runtime.Serialization.Json; 2.实体类需声明为public jsonhelp代码: using Syste ...

  7. C#中JSON序列化和反序列化

    有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...

  8. 关于asp.net 开发的小技巧—让传值对象化

    前端:前端 定义一个对象, 传值时实例此对象,序列化成json字符串 代码如下: 定义js对象: ///定义一个查询条件对象 var SearchCondition=function(){ this. ...

  9. 微信授权步骤与详解 -- c#篇

    微信授权步骤与详解 -- c#篇 注:这里不涉及界面操作,只介绍代码操作. 1.基本原理如下: 从图上所知,第一步用户访问我们的网页,第二步我们后台跳转到微信授权页面,第三步用户点击授权,第四步微信重 ...

随机推荐

  1. 架构实战项目心得(三):JAVA和MAVEN的环境配置

    1 java环境配置: 1 下载并安装jdk1.82 配置java环境变量: vi /etc/profile,在文件底部增加以下内容:export JAVA_HOME=/data/program/so ...

  2. log4j记录日志 和 webAppRootKey关系

    今天发现一个问题,就是后台从某天开始不再记录日志了,最后发现是 webAppRootKey 的 value 的值必须要和log4j的注入变量要一致. 如下:web.xml文件的 webAppRootK ...

  3. Bookstrap4 学习(一)

    容器 container 是最基本的lagyout 元素, 并且当使用默认的Grid 系统时, containers 是必须的. <div class="container" ...

  4. [转]what’s the difference between @Component ,@Repository & @Service annotations in Spring

    原文地址:https://www.cnblogs.com/softidea/p/6070314.html @Component is equivalent to <bean> @Servi ...

  5. github上传的项目代码语言类型修改

    我们在访问gitHub的时候,经常会看到如下的语言标记,那么这个是如何设置的呢,下面我就整理下具体的操作步骤: 首先在项目根目录下创建一个文件,文件名为.gitattributes 文件内容为: *. ...

  6. 最近使用日期控件时,用到了My97DatePicker控件,单日期控件,记录一下

    以上是使用时的效果,可以自己设定日期有效区间,如下图: 对于起始日期和终止日期的控制如下: <td> <label >起始日期:</label> <input ...

  7. How WindowLeaked exception occured?

    If a Activity performDestroy, and there is window not closed whose window token is the Activity's mW ...

  8. 浮动的补充丶文本和字体属性丶background丶定位

    一丶浮动的补充 浮动的特性: 1. 浮动的元素脱标 2.浮动的元素互相贴靠 3.浮动的元素有"字围"效果 4.浮动的元素有收缩的效果 前提是标准文档流,margin的垂直方向会出现 ...

  9. Memcache 学习笔记(二)---- PHP 脚本操作 Memcache 服务器

     PHP 脚本操作 Memcache 服务器 一.PHP脚本操作Memcache方法 使用 PHP 脚本操作 Memcache,在 PHP 手册中有详细的介绍,我们可以实例化 Memcache 类,根 ...

  10. js修改日期

    需求说明: (1)首先是input显示年月日时分格式时间,其中年月日实在本地时间基础上,加上后面联动值.小时默认08:00不变 (2)后面input内显示天数,右侧加减按钮,控制天数,天数确定后,前面 ...