首次遭遇Json格式,緣由項目中用到Json數據,需要進行解析,爲此,將Json數據轉爲了自己較爲熟悉的DataTable格式,以此展示至DataGridView中,驗證是否成功。
直接上代碼:
/// <summary> /// JSON數據轉換爲datatable類型數據 /// </summary> /// <param name="strjson">JSON數據字符串</param> /// <returns>轉換爲DataTable類型的JSON數據</returns> private DataTable JSONToDataTable(string strjson) { DataTable dt=new DataTable(); DataColumn dc; DataRow dr; #region 添加列 //用於添加列 JsonReader jrcolumn = new JsonTextReader(new StringReader(strjson)); bool hascolumn = false; //當前列名是否存在 while (jrcolumn.Read()) { //判斷當前值是否是字段名 if (jrcolumn.TokenType.ToString() == "PropertyName") { //判斷當前列名是否在datatable中已存在 foreach (DataColumn column in dt.Columns) { if (column.ColumnName == jrcolumn.Value.ToString()) { hascolumn = true; //存在相同名稱的列 break; } } //存在相同列,表示全部結束 if (hascolumn == true) { break; } //添加新列 dc = new DataColumn(); dc.ColumnName = jrcolumn.Value.ToString(); jrcolumn.Read(); dc.DataType = System.Type.GetType(jrcolumn.ValueType.ToString()); //列類型 dt.Columns.Add(dc); } } #endregion #region 添加數據記錄 //用於添加記錄 JsonReader jrrow = new JsonTextReader(new StringReader(strjson)); dr = dt.NewRow(); while (jrrow.Read()) { if (jrrow.TokenType.ToString() == "PropertyName") { string columnname = jrrow.Value.ToString(); jrrow.Read(); dr[columnname] = jrrow.Value.ToString(); if (columnname == dt.Columns[dt.Columns.Count - 1].ColumnName.ToString()) { dt.Rows.Add(dr); dr = dt.NewRow(); } } } #endregion return dt; }
析:先獲取列名——json數據的字段名稱,然後獲取具體數據。此段代碼未對一次處理,後期將進一步改進。
成功時候,又以相同方式完成將數據加到ListView中。