我的后台开发语言是 .net ,界面使用 Ext 做的,在做项目的时候,发现一个问题,每开发一个功能,查询数据库,把数据库的表结构返回给类库作为一个对象处理
,然后返回给界面需要重新转换一成 Json 字符串,我开始的时候使用:
List<Hr_CompanyInfo> list = new List<Hr_CompanyInfo>();
foreach (DataRow row in Hr_CompanyManager.GetAllCompany(strConndition).Rows)
{
Hr_CompanyInfo info = new Hr_CompanyInfo();
info.Name = row["Name"].ToString();
info.Id = new Guid(row["Id"].ToString());
info.Leaf = Convert.ToBoolean(row["Leaf"].ToString());
list.Add(info);
}
JavaScriptSerializer s = new JavaScriptSerializer();
StringBuilder temp_sb = new StringBuilder();
s.Serialize(list, temp_sb);
tree_json = temp_sb.ToString();
上面的显示是给 树结构使用的,
如果是给 Gridview 使用,数据返回格式是:
List<Hr_CompanyInfo> list = new List<Hr_CompanyInfo>();
foreach (DataRow row in Hr_CompanyManager.GetCompanyPage(strConndition).Rows)
{
list.Add(Hr_CompanyManager.DataReaderToEntity(row));
}
JavaScriptSerializer s = new JavaScriptSerializer();
StringBuilder temp_sb = new StringBuilder();
s.Serialize(list, temp_sb);
Int64 totalCount = Hr_CompanyManager.GetComanyCount("");
StringBuilder b = new StringBuilder();
b.Append("totalCount:" + totalCount.ToString() + ",");
b.Append("success:true,");
b.Append("error:\"\"");
b.Append(",singleInfo:\"\"");
tree_json = "{"+ b.ToString() +" , temp_json:" + temp_sb.ToString() + "}";
这两种方式多不错,但是我自己觉得,这样每次都是做重复工作,而且把数据库表首先转换成对象,然后把对象转换成Json ,,为什么不直接把表抓出,直接转化成json 呢
所以我 学了一个类, 注意是把数据的表数据直接读出,是 datatable 类型,然后创建json
贴代码了:
namespace Rinpak.HR.Business
{
public class JSONHelper
{
/*
action:
* 0 操作失败
* 1,操作成功
* 2,没有提供参数
* 3,存在子类,请先删除子类
*/
private String m_result;
private readonly String END = "@End@";
private readonly String DATA = "data:";
private ArrayList list = new ArrayList();
private readonly String m_NOParams = "{ 'success':'false', 'msg':'请提供参数!', 'action':'2' }";
private readonly String m_HASChild = "{ 'success':false, 'msg':'存在子类,请先删除子类!', 'action':'3' }";
private readonly String m_Success = "{ 'success':true, 'msg':'恭喜你,操作成功!', 'action':'1' }";
private readonly String m_False = "{ 'success':false, 'msg':'对不起,操作失败!', 'action':'0' }";
public String ResultMsg {
get {
return m_result;
}
}
public String HASChild
{
get { return m_HASChild; }
}
public String NoParams
{
get { return m_NOParams; }
}
public String ProSuccess
{
get { return m_Success; }
}
public String ProFalse
{
get { return m_False; }
}
public JSONHelper()
{
}
// 这个方法是关键
public String TransferJSON(DataTable dt, Boolean isPage)
{
if(dt.Rows.Count <=0)
return "{ " + DATA + "[{}]" +"}";
Int32 count = dt.Rows.Count;
Int32 t = 0;
for (Int32 r = 0; r < count; r++ ) // 这个我是查询有多少行
{
list.Add("{");
for (int i = 0; i < dt.Columns.Count; i++) // 这里判断一共有多少列
{
list.Add(SetHash(dt.Columns[i].ColumnName, Convert.ToString(dt.Rows[r][i])));
}
if (r == count - 1)
list.Add("}");
else
list.Add("},");
t++;
}
StringBuilder a = new StringBuilder();
foreach (string str in list)
{
a.Append(str);
}
if (isPage)
{
StringBuilder b = new StringBuilder();
b.Append("{ totalCount:" + count.ToString() + ",");
b.Append("success:true,");
b.Append(DATA + "[" + a.ToString() + "]}");
return b.ToString();
}
else
return "{" + DATA + "[" + a.ToString() + "]}";
}
private String SetHash(String name, String value)
{
if(list.Count <=1)
return "'" + name +"':" + "'" + value +"'" ;
else
return " ,'" + name + "':" + "'" + value + "'";
}
}
}
界面调用: DataTable dt = Hr_CompanyManager.SelectByCondition(strConndition);
JSONHelper json = new JSONHelper();
tree_json= json.TransferJSON(dt, false);
是不是简单多了,哈哈,希望大家提建议,一起进步