string类型的json数据转换成object后,如何操作才能提取需要的数据呢?
本帖最后由 matrixkey 于 2013-02-05 23:00:55 编辑 我在做一个从easyui的datagrid中导出“datagrid里的数据”的功能。
把datagird的data和columns属性以json格式由js传入控制器,如下。
function TestExport() {
if (datagrid_data.total == 0) {
$.messager.alert('提示', "查询结果区域没有数据可导出", 'info');
} else {
var columns = $('#dg').datagrid("options").columns;
//alert(JSON.stringify(columns));
//alert(JSON.stringify(datagrid_data));
$.post("/Export/ExportData", { data: JSON.stringify(datagrid_data), columns: JSON.stringify(columns) }, function (result) {
if (result.success) {
alert(1);
} else {
$.messager.alert('提示', result.msg, 'error');
}
}, "json");
}
}
控制器中的ExportData动作如下:
public ActionResult ExportData([ModelBinder(typeof(JsonBinder))]object data, [ModelBinder(typeof(JsonBinder))]List<Object> columns)
{
//啥都没写
return Json(new { success = true });
}
其中,[ModelBinder(typeof(JsonBinder))]是对传入的string格式的json数据进行反序列化,具体代码如下:
public class JsonBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
//从请求中获取提交的参数数据
var json = controllerContext.HttpContext.Request.Form[bindingContext.ModelName] as string;
//提交参数是对象
if (json.StartsWith("{") && json.EndsWith("}"))
{
Dictionary<string, object> JsonObj = new Dictionary<string, object>();
JObject jsonBody = JObject.Parse(json);
JsonSerializer js = new JsonSerializer();
object obj = js.Deserialize(jsonBody.CreateReader());
return obj;
}
//提交参数是数组
if (json.StartsWith("[") && json.EndsWith("]"))
{
JArray jsonRsp = JArray.Parse(json);
List<object> list = new List<object>();
if (jsonRsp != null)
{
for (int i = 0; i < jsonRsp.Count; i++)
{
JsonSerializer js = new JsonSerializer();
object obj = js.Deserialize(jsonRsp[i].CreateReader());
list.Add(obj);
}
}
return list;
}
return null;
}
}
这个类用到了Newtonsoft.Json这个dll。
我的问题是,把data反序列化后,对象有了,内容如图

可我怎么去得到total,以及每个row里的各种属性的值呢?
同样的问题,把colunms反序列化后,list<>也有了,如图

可我怎么去得到每个field的值呢?
只有22分了,希望可以有人帮忙~ json object datagrid
[解决办法]
这个格式的数据最好用Newtonsoft.Json反序列化成DataTable,然后操作就DataTable就简单了吧,呵呵