C# 解析復雜的Json文件
我們都是世上多余的人,但至少我們對於彼此都是世界最重要的人。
Json 百度百科上這樣說:
JSON(JavaScript Object Notation, JS 對象標記) 是一種輕量級的數據交換格式。
它基於 ECMAScript (w3c制定的js規範)的一個子集,采用完全獨立於編程語言的文本格式來存儲和表示數據。
簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網絡傳輸效率。
照我看來,它有兩種形式,
一 : 它是一種數據傳輸通道 二 : 它有時候可以直接作為數據源
因此如何讀取,解析它 是我們作為軟件開發人員,必須要掌握的技能!!!
我這裏的案例是Json字符串作為項目的數據源,我的工作是把它解析出來,封裝成 dataSet 供窗體作顯示用。
首先第一步 : 打開Json文件,先沈下心來看半個小時,如果沒看懂。那就再看半小時,直到清楚它的結構為止。
第二步 : 也是很關鍵的一步,創建實體類 網上有自動轉換的工具,訪問這個網址:https://www.bejson.com/convert/json2csharp/ 把你的json 粘貼復制到上面即可 它會自動轉換成你想要的。
這就是我的實體類 結構不算很復雜
第三步 : 實例好了實體類對象 就可以轉換了 C#提供了很多操作Json 的工具類
我用的是 JsonConvenrt類下面的DeserializeObject<T>(string value)方法
具體格式為
對象 = JsonConvenrt.DeserializeObject<對象>(Json字符串);
如果對象的結構和你的Json 結構一致 一般是不會報什麽錯的~~
第四步 : 下面就是把實體類轉換成DataSet對象了
代碼如下: 可直接套用
DataSet ds = new DataSet();
DataTable dt = new DataTable();
DataColumn dname= new DataColumn(”名字",typeof(string));
dname.maxLength = 20; //次列的最大長度 此屬性可有可無
dt.Columns.add(dname);
DataColumn dAge = new DataColumn("年齡"mtypeof(string));
dAge.maxLength = 20;
dt.Columns.add(dAge);
DataColumn dSex = new DataColumn("性別",typrof(int));
dSex.maxLebgth = 20;
dt.Columns.add(dSex);
foreach(Student stu in List<Student>){ //這就是實體類嘍
DataRow dr = new DataRow();
dr["年齡"] = stu.age;
dr["名字"] = stu.name;
dr["性別"] = stu.sex;
dt.Rows.add(dr);
}
ds.Tables.add(dt);
最後一步 : 就是綁定datagridview
this.datagridview.DataSource = ds.Table[0];
大功告成 其實很簡單 主要就是不要慌 慢慢來
在這裏 我說說我遇到的Bug
就是在第三步轉換實體類的時候,會報這個錯:
意思是 : 錯誤的轉換 在Json裏某一個屬性的值 是string 可自動生成時變成了 int 。 類型錯誤。不要怕麻煩,找到類型不匹配的,一一改回來就可以了。
C# 解析復雜的Json文件