62,047
社区成员
发帖
与我相关
我的任务
分享
private static string jasonstr=string.Empty;
private static int Countsum=0;
private static void DeptListAdd(DataTable Roledt, DataTable dtSource, int depth)
{
bool isend = false;
string RoleID=Roledt.Rows[depth]["MenuID"].ToString();
DataRow[] drs = dtSource.Select("ParentID=" + RoleID);
for (int i = 0; i < drs.Length; i++)
{
if (depth == 0)
{
isend = false;
jasonstr += "{\"id\":" + drs[i]["id"].ToString() + ",\"MenuName\":\'" + drs[i]["MenuName"].ToString() + "',\"MenuLink\":\"" + drs[i]["MenuLink"] + "\"},";
int dp = depth + 1;
Countsum++;
DeptListAdd(Roledt, dtSource,dp);
}
else
{
bool last = i == drs.Length - 1;
isend = last;
jasonstr += "{\"id\":" + drs[i]["id"].ToString() + ",\"MenuName\":\'"+ drs[i]["MenuName"].ToString() +"',\"MenuLink\":\"" + drs[i]["MenuLink"] + "\"}";
Countsum ++;
int dp = depth + 1;
DeptListAdd(Roledt, dtSource, dp);
}
}
if (!isend)
{
jasonstr = jasonstr.Replace(",,", ",").Replace("}{", "},{");
jasonstr += ",";
}
}
int count = 0;
string _jsonstr;
_jsonstr = RolemenuBLL.GetRoleMenu(RoleID, out count);
if (!string.IsNullOrEmpty(_jsonstr))
{
_jsonstr = "{\"code\":1,\"msg\":\"Success\",\"count\":" + count + ",\"data\":[" + _jsonstr + "]}";
}
else
{
_jsonstr = "{\"code\":0,\"msg\":\"Failed\",\"count\":" + count + ",\"data\":[null]}";
}
Context.Response.ContentType = "application/json; charset=utf-8";
Context.Response.Write(_jsonstr);
Context.Response.End();
Role GetRole(..... datasource, string topRoleId)
{
......
}
这有明确的输入输出强类型,不用什么 static 关键字,这是普通的类型转换函数,能够“用一句话”就将强类型的 Role 对象序列化为准确的 json 字符串。实际上也能看出你可能根本不需要 DataTable。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)
{
//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)
{
//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());
}
}
}
}