• Json Object转Model, Model、DataTable转Json Object (Jayrock技巧)


    Json Object转Model, Model、DataTable转Json Object (Jayrock技巧)

        本文假定读者有一定的Ext 控件的使用经验...

        看过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 字符串:

     /// <summary> DataTable二维表格转为符合json格式的字符串 </summary>
            
    /// <param name="tableSource">数据库查询结果</param>
            
    /// <param name="fields">需要添加进来的字段名</param>
            
    /// <returns></returns>
            public string 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"});

  • 相关阅读:
    OCP 062【中文】考试题库(cuug内部资料)第19题
    OCP 062【中文】考试题库(cuug内部资料)第18题
    OCP 062【中文】考试题库(cuug内部资料)第17题
    743. 网络延迟时间 力扣(中等) 最短路径SPFA,不熟练
    1337. 矩阵中战斗力最弱的 K 行 力扣(简单) 确实简单,结构体排序,二分也可
    171. Excel 表列序号 力扣(简单) 想不明白的题
    987. 二叉树的垂序遍历 力扣(困难) bfs+hash+优先队列 感觉还是简单的,就是复杂了点
    46. 全排列 力扣(中等) 容器或回溯
    1947. 最大兼容性评分和 周赛 力扣(中等) 排列next_permutation用法
    1104. 二叉树寻路 力扣(中等) 数学题,思考久了
  • 原文地址:https://www.cnblogs.com/Koy/p/1297929.html
Copyright © 2020-2023  润新知