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.基本原理如下: 从图上所知,第一步用户访问我们的网页,第二步我们后台跳转到微信授权页面,第三步用户点击授权,第四步微信重 ...
随机推荐
- Linux下ffmpeg添加Facebook/transform代码块实现将全景视频的球模型转换成立方体模型
Facebook事实上已开始在平台中支持360度全景视频的流播,但公司对此并不满足.其工程师更是基于锥体几何学设计出了一套全新的视频编码,号称最高能将全景视频的文件大小减少80%.(VR最新突破:全景 ...
- Golang教程:switch 语句
switch 是一个条件语句,用于将一个表达式的求值结果与可能的值的列表进行匹配,并根据匹配结果执行相应的代码.可以认为 switch 语句是编写多个 if-else 子句的替代方式. 举例是说明问题 ...
- 007.ASP.NET MVC控制器依赖注入
原文链接:http://www.codeproject.com/Articles/560798/ASP-NET-MVC-Controller-Dependency-Injection-for-Be 前 ...
- android 动态库死机调试方法 .
原地址:http://blog.csdn.net/andyhuabing/article/details/7074979 这两种方法都不是我发明了,都是网上一些高手公共出来的调试方法,无奈找不到出处的 ...
- laravel JWT Auth - JSON Web令牌认证API
https://github.com/tymondesigns/jwt-auth/wiki
- javaweb servlet jsp简单笔记
第二章: 1: web 俗称 : 万维网 www 2: web开发 的三大核心: HTML(网页) ,URL(定位),HTTP:(协议) 页面的分类: 静态页面: html+css 动态页面:jsp ...
- angular2-HttpClient
@angular/common/http中的HttpClient类,Angular 为应用程序提供了一个简化的 API 来实现 HTTP 功能.它基于浏览器提供的XMLHttpRequest接口. H ...
- 1-5 Sass的基本特性-运算
[Sass运算]加法 程序中的运算是常见的一件事情,但在 CSS 中能做运算的,到目前为止仅有 calc() 函数可行.但在 Sass 中,运算只是其基本特性之一.在 Sass 中可以做各种数学计算, ...
- <Android Framework 之路>BootAnimation(2)
前言 上一篇主要讲解了BootAnimation是从何而来,如何启动,从开机,到SurfaceFlinger服务起来,然后到执行开机动画,如果要深入的看里面的代码,是需要花一定的时间的,我们旨在了解大 ...
- 万网知您所需,“域”众不同--.link/.love/.help等一大波新顶级域来袭!
万网在新顶级域市场再次发力,一大波域名界的小鲜肉新鲜上线,价格优惠,限时低至9元起,更有丰富的可注册资源. 一下,即刻世界,用记录生活,用观看世界, 用和做最好的! 新上线的个性化新顶级域价格如下: ...