看过ext - editgridpanel实现效果的朋友会很惊讶,一个grid就能实现所有增删改查功能。在展示给客户看时,让你的表现得很风骚。而他们又怎么知道,我们在调试js时,是多么痛苦。 如何在js中调用后台业务逻辑类,在我前面的文章中已经讲述过,而本篇的重点在于
看过ext - editgridpanel实现效果的朋友会很惊讶,一个grid就能实现所有增删改查功能。在展示给客户看时,让你的表现得很风骚。而他们又怎么知道,我们在调试js时,是多么痛苦。 如何在js中调用后台业务逻辑类,在我前面的文章中已经讲述过,而本篇的重点在于js对象与后台对象之间的转换。
1. json object转model —— js定义json对象传递到后台业务类,后台接收后,转为数据模型。
json object = { 'kid':1, 'indexdirectory':‘c:\root’}
转换方法:
kdgpointdata kpd = (kdgpointdata)jsonconvert.import(typeof(kdgpointdata), jsonobject.tostring());
kdgpointdata就是数据模型类,使用jsonconvert对象需要引用两个动态链接库(地址见文章附录),并添加: using jayrock.json.conversion;
import()方法重载了5次,这里用到的是,第一个参数为你想转换的类型,第二个参数为json object转为string后的结果。
注意:在后台接收js对象,都用object来接收,也就是说,上面的jsonobject在c#方法类中,是一个object对象,转换后,才是model。而且jsonobject中元素的个数,key的大小写都要跟model中的属性保持一直。
2. model转json object —— 这个不需要转变,直接将model或者model[]作为方法的返回类型,在js那边接收后,定义对应的jsonreader,就可以了。
如果你在定义ext.data.store使用了proxy属性,并定义了相应的url,那么jayrock倒有一个将model转为符合json格式字符串的方法:
string temp = jsonconvert.exporttostring(model);
然后,response.write(temp); response.end(); 如此请求这个url后,从而获得json数据。
3. datatable转json object —— 这个有两种做法,一种是将datatable转为model或model[],再通过第二种方式转换,或者自己写一个方法拼接json 字符串:
/// datatable二维表格转为符合json格式的字符串
///数据库查询结果
///需要添加进来的字段名
///
publicstring datatabletojson(datatable tablesource, string[] fields)
{
string jsondata ={'totalcount':+ tablesource.rows.count +,'root':[;
if (tablesource.rows.count >0)
{
foreach (datarow row in tablesource.rows)
{
jsondata +={;
for (int i =0; i fields.length; i++)
jsondata +='+ fields[i] +':'+ row[fields[i]] +',;
jsondata = jsondata.substring(0, jsondata.length -1);
jsondata +=},;
}
jsondata = jsondata.substring(0, jsondata.length -1);
jsondata +=]};
}
else
{
jsondata +=]};
}
return jsondata;
}
封装后格式为{
totalcount : 6,
root : [
{'id' : 1, 'name' : 'lislie' }, { 'id' : 2, 'name' : 'mark' }...
]
}
使用方法:string temp = datatabletojson(dt, {id, name});
http://hi.baidu.com/38608338/blog/item/a746f9dcab53653c5982dde2.html