62,266
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// Json 字符串 转换为 DataTable数据集合
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static DataTable DtToJson(string json)
{
////取出表名
//Regex rg = new Regex(@"(?<={)[^:]+(?=:/[)", RegexOptions.IgnoreCase);
//string strName = rg.Match(strJson).Value;
DataTable tb = null;
////去除表名
//strJson = strJson.Substring(strJson.IndexOf("[") + 1);
//strJson = strJson.Substring(0, strJson.IndexOf("]"));
//获取数据
Regex rg = new Regex(@"(?<={)[^}]+(?=})");
MatchCollection mc = rg.Matches(json);
for (int i = 0; i < mc.Count; i++)
{
string strRow = mc[i].Value;
string[] strRows = strRow.Split(',');
//创建表
if (tb == null)
{
tb = new DataTable();
tb.TableName = "";
foreach (string str in strRows)
{
DataColumn dc = new DataColumn();
string[] strCell = str.Split(':');
dc.ColumnName = strCell[0].ToString().Replace("\"", "").Trim();
tb.Columns.Add(dc);
}
tb.AcceptChanges();
}
//增加内容
DataRow dr = tb.NewRow();
for (int r = 0; r < strRows.Length; r++)
{
dr[r] = strRows[r].Split(':')[1].Trim().Replace(",", ",").Replace(":", ":").Replace("/", "").Replace("\"", "").Trim();
}
tb.Rows.Add(dr);
tb.AcceptChanges();
}
return tb;
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.IO;
using Newtonsoft.Json;
using System.Web;
using System.Reflection;
using System.Collections;
using System.Text.RegularExpressions;
//缺少编译器要求的成员“ystem.Runtime.CompilerServices.ExtensionAttribute..ctor”
namespace System.Runtime.CompilerServices
{
public class ExtensionAttribute : Attribute { }
}
namespace Util
{
/// <summary>
/// Author : yenange
/// Date : 2013-12-11
/// Description : json 辅助类
/// </summary>
public class JsonHelper
{
/// <summary>
/// DataSet 转 JSON . add by ngye, on 2013-02-18.
/// </summary>
/// <param name="ds">需要转换的数据源ds</param>
/// <returns>json字符串</returns>
public static string DataSetToJson(DataSet ds)
{
string json = string.Empty;
if (ds == null)
return json;
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
try
{
using (JsonWriter jw = new JsonTextWriter(sw))
{
JsonSerializer ser = new JsonSerializer();
jw.WriteStartArray();
foreach (DataTable dt in ds.Tables)
{
jw.WriteStartObject();
jw.WritePropertyName(dt.TableName);
jw.WriteStartArray();
foreach (DataRow dr in dt.Rows)
{
jw.WriteStartObject();
foreach (DataColumn dc in dt.Columns)
{
jw.WritePropertyName(dc.ColumnName);
ser.Serialize(jw, dr[dc].ToString());
}
jw.WriteEndObject();
}
jw.WriteEndArray();
jw.WriteEndObject();
}
jw.WriteEndArray();
sw.Close();
jw.Close();
}
}
catch (Exception ex)
{
return ex.Message;
}
return sb.ToString();
}
/// <summary>
/// DataTable 转 JSON
/// </summary>
/// <param name="atable_data">数据源DataTable</param>
/// <returns>返回DataTable转换成功的Json格式</returns>
///
public static string DataTableToJson(DataTable dt)
{
string s_jsonstring = string.Empty;
//参数检测
if (dt == null)
return s_jsonstring;
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
using (JsonWriter jw = new JsonTextWriter(sw))
{
JsonSerializer ser = new JsonSerializer();
jw.WriteStartArray();
foreach (DataRow dr in dt.Rows)
{
jw.WriteStartObject();
foreach (DataColumn dc in dt.Columns)
{
jw.WritePropertyName(dc.ColumnName);
ser.Serialize(jw, dr[dc].ToString());
}
jw.WriteEndObject();
}
jw.WriteEndArray();
sw.Close();
jw.Close();
}
return sb.ToString();
}
/// <summary>
/// 把DataRow转换为Json格式
/// </summary>
/// <param name="dr">行记录信息</param>
/// <returns>返回DataRow转换成功的Json格式</returns>
public static string DataRowToJson(DataRow dr)
{
string jsonString = string.Empty;
//参数检测
if (dr == null)
return jsonString;
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
DataTable tableData = dr.Table;
using (JsonWriter jw = new JsonTextWriter(sw))
{
JsonSerializer ser = new JsonSerializer();
jw.WriteStartArray();
jw.WriteStartObject();
foreach (DataColumn dc in tableData.Columns)
{
jw.WritePropertyName(dc.ColumnName);
ser.Serialize(jw, dr[dc].ToString());
}
jw.WriteEndObject();
jw.WriteEndArray();
sw.Close();
jw.Close();
}
return sb.ToString();
}
/// <summary>
/// 将 json 输出到客户端
/// </summary>
/// <param name="json">Json格式内容</param>
public static void ResponseWriteJson(String json)
{
HttpContext.Current.Response.ContentType = "text/json";
HttpContext.Current.Response.Write(json);
}
#region Json的序列化和反序列化
/// <summary>
///
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static string ToJson(object obj)
{
string strJson = string.Empty;
try
{
strJson = Newtonsoft.Json.JsonConvert.SerializeObject(obj, new DateTimeJsonConverter(), new LongJsonConverter());
}
catch (Exception ex)
{
//NengLong.CMP.Log.Base.Logging.Logger.Current.Fatal(ex);
}
return strJson;
}
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T FromJson<T>(string sJson)
{
try
{
return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(sJson, new DateTimeJsonConverter(), new LongJsonConverter());
}
catch (Exception ex)
{
//NengLong.CMP.Log.Base.Logging.Logger.Current.ErrorFormat("sJson={0}", ex, sJson);
//NengLong.CMP.Log.Base.Logging.Logger.Current.Fatal(ex);
}
return default(T);
}
#endregion
private class DateTimeJsonConverter : Newtonsoft.Json.JsonConverter
{
public override bool CanConvert(Type objectType)
{
return typeof(DateTime).IsAssignableFrom(objectType);
}
public override void WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer)
{
DateTime dt = (DateTime)value;
writer.WriteValue(dt.ToString("yyyy-MM-dd HH:mm:ss"));
}
public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
{
return DateTime.Parse(reader.Value.ToString());
}
}
private class LongJsonConverter : Newtonsoft.Json.JsonConverter
{
public override bool CanConvert(Type objectType)
{
return typeof(long).IsAssignableFrom(objectType);
}
public override void WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer)
{
writer.WriteValue(value.ToString());
}
public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
{
long v = 0;
long.TryParse(reader.Value.ToString(), out v);
return v;
}
}
private class StringJsonConverter : Newtonsoft.Json.JsonConverter
{
public override bool CanConvert(Type objectType)
{
return typeof(string).IsAssignableFrom(objectType);
}
public override void WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer)
{
writer.WriteValue(value.ToString());
}
public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
{
return System.Web.HttpUtility.UrlDecode(reader.Value.ToString());
}
}
}
}