/// <summary>
/// Redis缓存机制(适用于静态数据)
/// </summary>
/// <param name="context"></param>
/// <param name="t">类名</param>
/// <param name="mth">方法名</param>
/// <param name="key">设置Redis中的键名</param>
/// <param name="ts">设置参数类型</param>
/// <param name="o">设置参数名称</param>
/// <param name="type">设置数据库类型</param>
public void RedisCache(HttpContext context, Type t, string mth, string key, Type[] ts, object[] o, DataBaseType type)
{
string json = String.Empty;
if (RedisBase.Item_Exist(key))//判断Redis中,key能否存在;若存在,直接从redis取值,不存在则执行数据库访问方法,这种机制减缓了数据库的压力,提升了系统性能.
{
json = RedisBase.GetValue(key);//根据key获取value
}
else
{
object className = Activator.CreateInstance(t);//反射方法
MethodInfo mInfo = null;
object obj = null;
if (ts != null && o != null)//执行带有多种参数的方法
{
mInfo = t.GetMethod(mth, ts);
obj = mInfo.Invoke(className, o);
}
else//执行无参数的方法
{
mInfo = t.GetMethod(mth);
obj = mInfo.Invoke(className, null);
}
switch (type)//根据数据库类型处理字符串,因富基融通建库时使用的是西欧字符集.
{
case DataBaseType.Oracle:
json = Convert8859P1ToGB2312(JsonConvert.SerializeObject(obj));
break;
case DataBaseType.SQL_Server:
json = JsonConvert.SerializeObject(obj);
break;
}
RedisBase.Item_Set<string>(key, json, 120);//根据key设置value
}
context.Response.Write(json);
context.Response.End();
}
public delegate string JsonHandler<T>(T t);//本人定义了委托,就不知道怎么样使用了 public string SendJson_SQL<T>(T t) { return JsonConvert.SerializeObject(t); } public string SendJson_Ora<T>(T t) { return Convert8859P1ToGB2312(JsonConvert.SerializeObject(t)); }
解决方案
40
Func<string> jsonFunc //改为 Func<object,string> jsonFunc //然后方法传递 jsonFunc(obj);
(obj) =>
{
return Convert8859P1ToGB2312(JsonConvert.SerializeObject(obj));
});