iT邦幫忙

0

C# JSON 轉 object如何取值

我的問題如下:

//[{"CODE":"B","DESC":"B level"},{"CODE":"C","DESC":"C level"}]
string str = "[{\"CODE\":\"B\",\"DESC\":\"B level\"},{\"CODE\":\"C\",\"DESC\":\"C level\"}]";
object otn = Json2Object(str);  //這物件要如何取值?

我有在網路上找到一個方法:

    //JSON字串
    string Json = "{ 'Table1': [ { 'id': 1, 'item': '這是第1個項目' }, { 'id': 2, 'item': '這是第2個項目' }, { 'id': 3, 'item': '這是第3個項目' }, { 'id': 4, 'item': '這是第4個項目' } ] }";

    //將JSON字串轉為DataSet
    DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(Json);

    //建立DataTable,並塞進dataSet的值
    DataTable dataTable = dataSet.Tables["Table1"];

    //顯示DataTable的筆數
    Response.Write("共"+dataTable.Rows.Count+"筆資料</br>");
    
    //顯示DataTable的筆數
    foreach (DataRow row in dataTable.Rows)
    {
         Response.Write(row["id"] + " - " + row["item"]);
    }

細看差別在我的資料沒有 Table1 這一層

請問是否這樣就沒辦法解了?

1 個回答

2
japhenchen
iT邦大師 1 級 ‧ 2020-09-01 16:01:13
最佳解答

1、跟據那個json的內容,建立相應的Class,你可以加開一個類別檔來放,或是放在你的CS檔的最下方

class JObj {
    public string CODE{get;set;}
    public string DESC{get;set;}  
}

2、個人喜好用Newtonsoft的JsonConvert(Nuget免費下載使用),因為C#的字串為雙引號,我把你的例子上的json裡的雙引號改為單引號,不然一堆反斜線會看到花路路

    string jsonstr = @"[{'CODE':'B','DESC':'B level'},{'CODE':'C','DESC':'C level'}]";
    var  csObj = JsonConvert.DeserializeObject<JObj>(jsonstr);

3、取值的方法,因為你的例子是陣列,所以要列舉

    foreach(var data in csObj){
        MessageBox.Show(data.CODE);
    }

打完收工

看更多先前的回應...收起先前的回應...
Amigo iT邦新手 5 級 ‧ 2020-09-01 16:08:49 檢舉

對不起我沒看清楚,我懂了。謝謝大師

Amigo iT邦新手 5 級 ‧ 2020-09-01 16:48:45 檢舉

抱歉,請問我這樣寫了

    class JObj
    {
        public string CODE { get; set; }
        public string DESC { get; set; }

        public static void MainC5()
        {
            //JSON
            string jsonstr = @"[{'CODE':'B','DESC':'B level'},{'CODE':'C','DESC':'C level'}]";
            var csObj = JsonConvert.DeserializeObject<JObj>(jsonstr);
            foreach (var data in csObj)
            {
                Console.WriteLine(data.CODE);
            }
        }
    }

有錯誤訊息:
https://ithelp.ithome.com.tw/upload/images/20200901/20115544vaYr2TBdiW.png
是哪裡不對嗎?

Amigo iT邦新手 5 級 ‧ 2020-09-01 17:20:44 檢舉

解決了:

var csObj = JsonConvert.DeserializeObject<JObj[]>(jsonstr);

sorry忘了把陣列型別符號[]給加上去了,程式碼在這裡直接寫沒在實機上測試....疏忽...下次改進~

我要發表回答

立即登入回答