首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

请问一个Json字符串转DataTabe的有关问题-Json嵌套了几层,不会分析了,各位来帮忙哈

2013-11-13 
请教一个Json字符串转DataTabe的问题----Json嵌套了几层,不会分析了,各位来帮忙哈!原始数据:{startid:3

请教一个Json字符串转DataTabe的问题----Json嵌套了几层,不会分析了,各位来帮忙哈!
原始数据:
请问一个Json字符串转DataTabe的有关问题-Json嵌套了几层,不会分析了,各位来帮忙哈
请问一个Json字符串转DataTabe的有关问题-Json嵌套了几层,不会分析了,各位来帮忙哈
请问一个Json字符串转DataTabe的有关问题-Json嵌套了几层,不会分析了,各位来帮忙哈

{"startid":"3150","endid":"3136","totalpage":0,"bool":true,"data":[{"valueID":{"id":"3150"},"text":["TP-LINK TECHNOLOGIES CO., LTD.","TP-LINK-89C5BA","EC:88:8F:89:C5:BA","22594495","0","2013-11-4 14:36:56","3150"]},{"valueID":{"id":"3149"},"text":["TP-LINK TECHNOLOGIES CO., LTD.","TP-LINK","5C:63:BF:3F:DD *","93793841","0","2013-11-4 14:28:55","3149"]},{"valueID":{"id":"3148"},"text":["TP-LINK TECHNOLOGIES CO.,LTD.","TP-LINK  A97CDC","BC-D1-77-A9-7C-DC","66497721","0","2013-11-4 13:40:22","3148"]},{"valueID":{"id":"3147"},"text":["BZD",".....","6C:E8\uff1a73\uff1aA7\uff1a80\uff1aB6","16499249","0","2013-11-4 11:48:13","3147"]},{"valueID":{"id":"3146"},"text":["TP-LINK","7F1082","EC:88\uff1a8F:7F:10:80","64004143","0","2013-11-4 11:47:07","3146"]},{"valueID":{"id":"3145"},"text":["TP-LINK TECHNOLOGIES CO.,LTD.","Volontiers","BC:D1:77:20:3B:B0","74196425","0","2013-11-4 11:11:02","3145"]},{"valueID":{"id":"3144"},"text":["TP-LINK TECHNOLOGIES CO.,LTD.","TP-LINK","A8:15:4D:9A:33:22","80959472","0","2013-11-4 11:10:01","3144"]},{"valueID":{"id":"3143"},"text":["TP-LINK TECHNOLOGIES CO., LTD.","FAST_50E602","38:83:45:50:E6:02","76232473","0","2013-11-4 11:08:26","3143"]},{"valueID":{"id":"3142"},"text":["FiberHome Telecommunication Technologies CO.,LTD","chinanet","00:0a:c2:e9:3E:85","10973592","0","2013-11-3 20:23:56","3142"]},{"valueID":{"id":"3141"},"text":["TP-LINK TECHNOLOGIES CO., LTD.","ck","40:16:9f:45:95:b6","24025874","0","2013-11-3 18:51:57","3141"]},{"valueID":{"id":"3140"},"text":["TP-LINK TECHNOLOGIES CO., LTD.","TP-LINK_7FF4B6","5C:63:BF:7F:F4:B6","72403853","1","2013-11-3 8:16:17","3140"]},{"valueID":{"id":"3139"},"text":["TP-LINK TECHNOLOGIES CO., LTD.","TP-LINK_8A1A8C","14:E6:E4:8A:1A:8C","63078589","0","2013-11-2 21:33:42","3139"]},{"valueID":{"id":"3138"},"text":["CHINIA","Chinanet","72:87:30:D0:17:3C","36374366","0","2013-11-2 20:31:39","3138"]},{"valueID":{"id":"3137"},"text":["Tenda Technology Co., Ltd.","Tenda_024CF8","C8:3A:35:02:4C:F8","28004905","0","2013-11-2 18:48:24","3137"]},{"valueID":{"id":"3136"},"text":["TP-LINK TECHNOLOGIES CO., LTD.","J*****","8C:21:0A:A6:BE *","21948299","1","2013-11-1 18:09:17","3136"]}]}


可以直接解析字符串,也可以用Json.Net,能达到目的就可以了。
参考文章:

Asp.net中Json格式转换为DataTable - anguslzh的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/anguslzh/article/details/8291897

---------------------------------------------------------------
示例代码:
public DataTable getDataTable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("channelid", typeof(System.Int32));
            dt.Columns.Add("name", typeof(System.String));
            dt.Columns.Add("filesize", typeof(System.Int32));
            dt.Columns.Add("duration", typeof(System.Int32));
            dt.Columns.Add("bitrate", typeof(System.Int32));
            dt.Columns.Add("video_stream_type1", typeof(System.Int32));
            dt.Columns.Add("audio_stream_type1", typeof(System.Int32));
            dt.Columns.Add("active", typeof(System.Int32));
            return dt;
        }
        /// <summary>
        /// json转换为DataTable
        /// </summary>
        /// <param name="json">需要转化的json格式字符串</param>
        /// <returns></returns>
        public DataTable updateInfo(string json)
        {
            System.Web.Script.Serialization.JavaScriptSerializer jss =
new System.Web.Script.Serialization.JavaScriptSerializer();
            object[] obj = (object[])jss.DeserializeObject(json);
            Dictionary<string, object> dic;
            DataRow dr;
            DataTable dt = getDataTable();
            foreach (object _obj in obj)
            {
                dr = dt.NewRow();


                dt.Rows.Add(dr);
                dic = (Dictionary<string, object>)_obj;
                dr["channelid"] = dic["channelid"];
                dr["name"] = dic["name"];
                dr["filesize"] = dic["filesize"];
                dr["duration"] = dic["duration"];
                dr["bitrate"] = dic["bitrate"];
                dr["video_stream_type1"] = dic["video_stream_type1"];
                dr["audio_stream_type1"] = dic["audio_stream_type1"];
                dr["active"] = dic["active"];
            }
            return dt;
        }


[解决办法]
我实现了转换成实体类的方法 你的DataTable方法 貌似不行 因为有一个属性是一对多的
class Base
    {
        public int startid { get; set; }
        public int endid { get; set; }
        public int totalpage { get; set; }
        public bool Bool { get; set; }
        public List<object> data { get; set; }

        
    }
    class Child
    {
        public ValueId valueID { get; set; }
        public List<string> text { get; set; }
    }
    class ValueId
    {
        public int Id { get; set; }
    }

var json = File.ReadAllText("json.txt");
            JavaScriptSerializer jss = new JavaScriptSerializer();
            var res = jss.Deserialize<Base>(json);

[解决办法]
如果

{"valueID":{"id":"3150"},"text":["TP-LINK TECHNOLOGIES CO., LTD.","TP-LINK-89C5BA","EC:88:8F:89:C5:BA","22594495","0","2013-11-4 14:36:56","3150"]}

已经满足你DATATABLE里每列的属性的话,就别纠结那么多了,就干脆对字符串直接用正则把他们全部截取出来。。
[解决办法]
最终代码

class Base
    {
        public int startid { get; set; }
        public int endid { get; set; }
        public int totalpage { get; set; }
        public bool Bool { get; set; }
        public List<Child> data { get; set; }

        
    }
    class Child
    {
        public ValueId valueID { get; set; }
        public List<string> text { get; set; }
    }
    class ValueId
    {
        public int Id { get; set; }
    }




 public static DataTable getDataTable()
        {
            DataTable dt = new DataTable();


            dt.Columns.Add("序号", typeof(string));
            dt.Columns.Add("路由", typeof(string));
            dt.Columns.Add("SSID", typeof(string));
            dt.Columns.Add("MAC", typeof(string));
            dt.Columns.Add("PIN", typeof(string));
            dt.Columns.Add("使用率", typeof(string));
            dt.Columns.Add("增加时间", typeof(string));
            return dt;
        }


var json = File.ReadAllText("json.txt");
            JavaScriptSerializer jss = new JavaScriptSerializer();
            var res = jss.Deserialize<Base>(json);
            DataTable dt = getDataTable();
            foreach (var item in res.data)
            {
                var newRow = dt.NewRow();
                for (int i = 0; i < item.text.Count; i++)
                {
                    newRow[i] = item.text[i];
                }
                dt.Rows.Add(newRow);
            }
            //这个DataTable就是了dt

热点排行