代码之家  ›  专栏  ›  技术社区  ›  Florian Zaskoku

将对象/动态作为DataGridView

  •  1
  • Florian Zaskoku  · 技术社区  · 6 年前

    我解密后得到了一个json字符串

    "{\"HardwareInformation\":{\"NumberOfProcessors\":8,\"PageSize\":4096,\"ProcessorType\":586,\"ProcessorTypeText\":\"]\",\"ActiveProcessorMask\":255},\"SystemInformation\":{\"ComputerName\":\"PD-AT-23006\",\"UserName\":\"230010\",\"SystemDirectory\":\"C:\\\\\\\\Windows\\\\\\\\system32\",\"WindowsDirectory\":\"C:\\\\\\\\Windows\",\"Is64BitWindows\":1},\"EnvironmentVariables\":{\"OS\":\"Windows_NT\",\"PATH\":\"C:\\\\\\\\Program Files (x86)\\\\\\\\NVIDIA Corporation\\\\\\\\PhysX\\\\\\\\Common;C:\\\\\\\\Program Files (x86)\\\\\\\\Intel\\\\\\\\iCLS Client\\\\\\\\;C:\\\\\\\\Program Files\\\\\\\\Intel\\\\\\\\iCLS Client\\\\\\\\;C:\\\\\\\\Windows\\\\\\\\system32;C:\\\\\\\\Windows;C:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\Wbem;C:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\WindowsPowerShell\\\\\\\\v1.0\\\\\\\\;C:\\\\\\\\Program Files\\\\\\\\Intel\\\\\\\\Intel(R) Management Engine Components\\\\\\\\DAL;C:\\\\\\\\Program Files\\\\\\\\Intel\\\\\\\\Intel(R) Management Engine Components\\\\\\\\IPT;C:\\\\\\\\Program Files (x86)\\\\\\\\Intel\\\\\\\\Intel(R) Management Engine Components\\\\\\\\DAL;C:\\\\\\\\Program Files (x86)\\\\\\\\Intel\\\\\\\\Intel(R) Management Engine Components\\\\\\\\IPT\",\"HOMEPATH\":\"\\\\\\\\\",\"TEMP\":\"C:\\\\\\\\Users\\\\\\\\230010\\\\\\\\AppData\\\\\\\\Local\\\\\\\\Temp\"}}\0"
    

    格式化的JSON字符串是

    。{
    “硬件信息”:。{
    “处理器数量”:8,
    “页面大小”:4096,
    “处理器类型”:586,
    “processorTypeText”:“]”,
    “ActiveProcessorMask”:255
    }
    “系统信息”:。{
    “computername”:“PD-AT-23006”,
    “username”:“230010”,
    “systemdirectory”:“C:\\\Windows\\\system32”,
    “windowsdirectory”:“C:\\\windows”,
    “IS64位窗口”:1
    }
    “environmentvariables”:。{
    “os”:“Windows NT”,
    “path”:“C:\\\Program Files(x86)\\\nvidiacorporation\\\physx\\\common;
    以及更多
    

    好吧,现在我想将头信息(如“HardwareInformation”、“SystemInformation”和“EnvironmentVariables”)设置为一列,并在它们下面的一行中设置其他信息。

    因为总是会有一些新的列或行,所以代码独立于我工作是很重要的(比如不为数据添加新的类)。

    我试过使用newtonsoft.json并将json置于动态

    dy动态json=crypt.getEncodedtxt(“37mpqhzhscgurezzblzb+tjnd0uyktbcoo0jvpv/bmeltofuxyzzzzzzkofaqtheasfzgiirzybjfvaz7bisjxeg5wtlzcH788bmm4nmgh0nypayxcLiz50mtimxxin0cH3cdivqtn1u7oxdggA2gt+2+5ceqnhkmpy5yyqqfev44hcdpvvvvvb3avb3ao+HT99f9f0+HT9fff0+Tjjjjjjuxxxxxxxzzz6op6c0/bp3nulocm公司UC5RFB010kxBxMncfhmu59hyfdJV/W7GNFKheap6doq9di5ou3gqnehy+lggxk/2hqtayfurtj9ot9tiz0njsh25c2vavvpqg12wa/8qzgmbdscy6wzsw/la5xbhn3J2生物3s8xjmqyvdexb7/xk3jsky5xyjk5xnytcpzzzy8hh3j自己的顺其itbbtmsnm2fooy8omho1fw4efj4oej4oeyyyyyyj4eyyyyyyyyjjjjjjjjjjjjjjvvvv0t5slo9wnz0vh4h4lptmxlkss6ymqu/14qpdpvg从一个角度来看,一个星期的天气是一个星期一个星期一个星期一个星期一个星期一个星期一个星期一个星期一个星期一个星期一个星期一个星期六个星期五个星期六个星期六个星期三个星期三个星期三个星期六个星期六个星期六个星期三个星期一个星期二个星期一个星期一个星期一个星期一个星期一个星期一个星期一个星期一个星期一个星期一个星期一个星期一个星期六个星期六个星期一个星期五个星期五个星期五个星期五个星期五个星期四个星期四个星期四个星期五个星期五个星期五个星期五个星期四个星期五个星期五个星期四个星期四个星期四个星期五个星期五个星期四个星期一个星期一个星期Lv28Dunwjhlm+hbgzjrvv7psb8i83b+o1wrbqwbmtuwby7zs在这种情况下,我们的工作是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下进行的,或者是在这种情况下,或者是在这种情况下进行的,或者是在这种情况下,6djmdmm5q/s0d2scaa+22xnn这是我的一个新的一个梦想,是我的一个梦想,是我的一个梦想,是我的一个梦想,是我的一个梦想,是我的一个梦想,是我的一个梦想,是我的一个梦想,是我的一个梦想,是我的一个梦想,是我的一个梦想,是我的一个梦想,是我的一个梦想,是我的一个梦想,是我的一个梦想,是我的一个梦想,是我的一个梦想,我的一个梦想,我的一个梦想,我的一个梦想,我的一个梦想,我的一个梦想,我的一个梦想,我的一个梦想,我的一个梦想,我的一个梦想,我的一个梦想,我的一个梦想,我的一个梦想,我的一个梦想rgruz8z9ldxdwnumgox1isiudpcq=“);
    

    (请忽略解密)作为jobject

    jobject json1=jobject.parse(json);
    

    动态未格式化,jobject为。

    表格应如下所示:

    谢谢你的帮助。

    格式化的JSON字符串是

    {
    "HardwareInformation": {
      "NumberOfProcessors": 8,
      "PageSize": 4096,
      "ProcessorType": 586,
      "ProcessorTypeText": "]",
      "ActiveProcessorMask": 255
    },
    "SystemInformation": {
      "ComputerName": "PD-AT-23006",
      "UserName": "230010",
      "SystemDirectory": "C:\\\\Windows\\\\system32",
      "WindowsDirectory": "C:\\\\Windows",
      "Is64BitWindows": 1
    },
    "EnvironmentVariables": {
      "OS": "Windows_NT",
      "PATH": "C:\\\\Program Files (x86)\\\\NVIDIACorporation\\\\PhysX\\\\Common;
    ..............................and more
    

    好吧,现在我想把“硬件信息”、“系统信息”和“环境变量”这样的头部信息设置为一列,并在它们下面的一行中设置其他信息。

    因为总是会有一些新的列或行,所以代码独立于我工作是很重要的(比如不只是为数据添加一个新类)。

    我试过用Newtonsoft.JSON把JSON变成动态的

    dynamic json = Crypt.getEncodedTXT("37MpQhzhSCGuReZnHZblzk+TJnD0uYkTbcoo0JvpV/bMeLFuckuVxYzbZlKOrfAqtwHOeaSFzGIRZybjgFVaz7BISjxEg5wTlZch788Bm4nMegha0rNYpaYXCliZ50MTimxxin0ch3CDIHVQTN1U7oxDgA2gt+2+5ceQnhKMpY5YOQFev44HCdpNVb03AO+HT9F0MtlUsIG84wg/Ez3i1Ab9+HV/Hs26hhbIoJEdGxh+6OP6c0/bp3NuloCmuC5rFb010KxSBxmNcFhmU59HYfDJv/W7gnfKhEaP6doQ9di5ou3GQNehy+LGGxK/2HqTayfurqtjJ9OT9TIZ0nJSH25C2VAvLPqG12WA/8qZgmbDscy6WZsW/LA5xbHN3j2bIo3s8xjMQyvDtvEoXBB7/XK3JsWkIk5xNYTCPuzkZEg8hh3jcrsEmitAhyITBtBmsNm2foyL8oMhO1fw4efj4oEYyQKSZJEoMANamKPdrIHbGpQDnm4Yn+aOVsBI2i980t5SlO9WNZ0vh4h4lPtmxLKSS6YMqu/14qpDpVgytBoK1aRFKRIxdPo/su8uO7R2m1VFgmWH4cE2Vk0kLNORi6gPmqkhunbPHZwN/qWiU2v6Lu3VjQ3RbkSayI+JzBw7IF+GDVNN5Sw3HS5uPpVGxPNLZTQ2V1xJ+zQB+A79Ps1lX1zLh8cbmgbT7CDBjhJQ6TNCU0UeLuSoCQOJVoRPyhY7ZmNINHLaJk4wboVg3D2vASr2P6/XOeOtWsjyjjD6SxW+qeUqaRvSAAJ3XlvYMTn0wbGjl/CNymLV28dUnWJHlM+HbgZjrvV7psb8I83B+O1wRBQwbMtuwBy7zsFWfErqscADwTCuksbRJuRfOQFRX/JI0FewRJtHZh6XDQ5QACOLkUUdQAo/Nhb8jhpnMQn5j5UOsO97lfVOmFp0MGovxyNLdjTefDnptForKmhkgDdcel8dpM82UUieBJG4igoSf+qRbhmihdutHB3lP7B0barxc4+t1As+wollx0EXSIBCAZtSmwHaaVVn/ZcxI36dIAoSjb5EIHO18JfWnm0Q/dwwYkUm4Xr/2thdtJeL9icmIDn+3bmo76jXu6gdUbhsUYZRBOOOsfmhL6dJMDMM5q/s0d2scaA+22XnnfiebDhet7i8xQe1DfnAME4qjlL1gBTqSPDKG/XZ2pnH5EpVbn+l32Oj2WD2YWem9TKPZoOJ6j3CwYfm0M0A1Z1FsoXtHrfXw535tOTVbn9ThrJhSMA88OaG10Huvi/A2MzeuaiisIfPwXiWZm8wa0mveR/hD1I5I7y+0/qEoavXDhwmpIytPJTIdg6gEHr7nsqoGNTKCg4ZBBMqKbIucV7PDSznus4zAt0McVN1dVt92k/pUOgmeW7SshYZhsrGrUz8Z9lDXdWNumgoX1iSIuDpCQ==");
    

    (请忽略解密)作为jobject

    JObject json1 = JObject.Parse(json);
    

    动态未格式化,Jobject为。

    dynamic debug pic

    JObject debug pic

    表格应如下所示: table

    谢谢你的帮助。

    1 回复  |  直到 6 年前
        1
  •  2
  •   L_J    6 年前

    首先,将JSON反序列化为 dictionary<string,dictionary<string,object> 。计算行数和列数。添加列和行。

    string jstr=“\”hardwareInformation\“:\”numberofprocessors\“:8,\”pagesize\“:4096,\”processorType\“:586,\”processorTypeText\“:\”]\“,\”activeprocessorsmask\“:255,\”systemInformation\“:\”computername\“:\”pd-at-23006\“,\”username\“:\”230010\“,\”systemdirectory\“:\”c:\\\\\windows\\\\ system32\“,\”windowsdirectory\“:\”c:\\\windows\“,\”is64bitwindows\“:1,\”environment variables\“:\”os\“:\”windows NT\“,\”path\“:\”c:\\\\程序文件(x86)\\\ envidiacorporation \\\\physx\ \\\common\“”
    
    var info=jsonconvert.deserializeObject<dictionary<string,dictionary<string,object>>>(jstr);
    
    dataTable dt=新dataTable();
    
    var maxcolumn=info.count;
    var maxrows=info.select(x=>x.value.count).max();
    
    //添加列
    foreach(信息中的var列)
    dt.columns.add(new datacolumn(column.key,typeof(string));
    
    //添加行
    对于(int r=0;r<maxrows;r++)
    {
    dataRow newRow=dt.newRow();
    
    对于(int c=0;c& lt;Maxcolumn;c++)
    {
    var columndic=info.values.elementat(c);
    
    var key=r<columndic.count?columndic.keys.elementat(r):“”;
    var value=r<columndic.count?columndic.values.elementat(r).toString():“”;
    
    newrow[c]=键+“:”+值;
    }
    dt.rows.add(新行);
    }
    

    然后将dataTable绑定到您的dataGridView

    dataGridView1.datasource=dt;
    

    输出:

    柱。添加列和行。

    string jstr = "{\"HardwareInformation\": {\"NumberOfProcessors\": 8,\"PageSize\": 4096,\"ProcessorType\": 586,\"ProcessorTypeText\": \"]\",\"ActiveProcessorMask\": 255},\"SystemInformation\": {\"ComputerName\": \"PD-AT-23006\",\"UserName\": \"230010\",\"SystemDirectory\": \"C:\\\\Windows\\\\system32\",\"WindowsDirectory\": \"C:\\\\Windows\",\"Is64BitWindows\": 1},\"EnvironmentVariables\": {\"OS\": \"Windows_NT\",\"PATH\": \"C:\\\\Program Files (x86)\\\\NVIDIACorporation\\\\PhysX\\\\Common\"}}";
    
    var info = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, object>>>(jstr);
    
    DataTable dt = new DataTable();
    
    var Maxcolumn = info.Count;
    var maxRows = info.Select(x => x.Value.Count).Max();
    
    // Add Columns
    foreach (var column in info)
        dt.Columns.Add(new DataColumn(column.Key, typeof(string)));
    
    // Add Rows
    for (int r = 0; r < maxRows; r++)
    {
        DataRow newrow = dt.NewRow();
    
        for (int c = 0; c < Maxcolumn; c++)
        {
            var columnDic = info.Values.ElementAt(c);
    
            var key = r < columnDic.Count ? columnDic.Keys.ElementAt(r) : "";
            var value = r < columnDic.Count ? columnDic.Values.ElementAt(r).ToString() : "";
    
            newrow[c] = key + ": " + value;
        }
        dt.Rows.Add(newrow);
    }
    

    然后绑定DataTable给你的DataGridView

    dataGridView1.DataSource = dt;
    

    输出: Output