[C#] read json file with unknown properties notes
最近要開發一個程式,目標是要可以存取格式未知的json格式dat檔案,檔案內的json字串有可能是物件包物件/字串/數字/陣列,裡面也有可能再包物件陣列,
要把裡面的屬性和變數值都讀出來,要讓使用者可以看、修改,所以打算把資料讀出來後,輸出到視窗應用程式的表格上,使用者也可以在表格上修改屬性的值,按下儲存後,需要再將修改過後的資料輸出存回到dat檔案裡。
一開始先讀取檔案中的json字串,這裡沒有遇到什麼問題,接下來要用jsonconvert的時候就開始困擾了,以前都是先建好物件的格式,但是現在的json物件根本不知道裡面有什麼屬性,
聽說可以用dynamic格式來承接jsonconvert轉出的物件,轉出後的物件可以直接用 . 加上屬性來取得數值,可現在屬性的名字也是未知的,就得找其他方法了。
又是一陣google搜尋,找到一個作法是用Dictionary<string, object>來轉出json物件,這樣就可以取出屬性及數值了。
這樣子就可以拿到目標的屬性和數值了。
因為目標物件中的屬性數量也是未知的,所以用foreach(var value in values),再用.Key和.Value把屬性名稱和數值取出來。
接下來,因為第一次jsonconvert取出的Value類型也是未知的,要使用.GetType()來讀出變數類型,再進入switch分別執行不同的動作。
如果是string/int的話,就可以直接輸出給使用者,如果是陣列,就要再判斷一次陣列中的包的是字串/數字/物件,如果是物件,就可以用遞迴再將物件丟回函式。
要把裡面的屬性和變數值都讀出來,要讓使用者可以看、修改,所以打算把資料讀出來後,輸出到視窗應用程式的表格上,使用者也可以在表格上修改屬性的值,按下儲存後,需要再將修改過後的資料輸出存回到dat檔案裡。
一開始先讀取檔案中的json字串,這裡沒有遇到什麼問題,接下來要用jsonconvert的時候就開始困擾了,以前都是先建好物件的格式,但是現在的json物件根本不知道裡面有什麼屬性,
聽說可以用dynamic格式來承接jsonconvert轉出的物件,轉出後的物件可以直接用 . 加上屬性來取得數值,可現在屬性的名字也是未知的,就得找其他方法了。
又是一陣google搜尋,找到一個作法是用Dictionary<string, object>來轉出json物件,這樣就可以取出屬性及數值了。
這樣子就可以拿到目標的屬性和數值了。
因為目標物件中的屬性數量也是未知的,所以用foreach(var value in values),再用.Key和.Value把屬性名稱和數值取出來。
接下來,因為第一次jsonconvert取出的Value類型也是未知的,要使用.GetType()來讀出變數類型,再進入switch分別執行不同的動作。
如果是string/int的話,就可以直接輸出給使用者,如果是陣列,就要再判斷一次陣列中的包的是字串/數字/物件,如果是物件,就可以用遞迴再將物件丟回函式。
留言
張貼留言