iT邦幫忙

1

請問如何實現 JSON字串轉DataTable?

  • 分享至 

  • xImage

呼叫web service取得JSON格式化資料
https://ithelp.ithome.com.tw/upload/images/20220322/201475236S1UYJevKj.png
請問有什麼方法將其資料轉為DataTable並將數據顯示到GridView中?

更)現已將資料存成List
https://ithelp.ithome.com.tw/upload/images/20220322/20147523DXWbcqp5Kr.jpg
不過仍無法將List以GridView呈現:((出現錯誤訊息
https://ithelp.ithome.com.tw/upload/images/20220322/20147523Aj7cjFYUb2.jpg

看更多先前的討論...收起先前的討論...
Homura iT邦高手 1 級 ‧ 2022-03-22 11:19:46 檢舉
直接轉物件塞到List
再給gridview就好
Homura iT邦高手 1 級 ‧ 2022-03-22 14:25:37 檢舉
貼個參考給你
https://stackoverflow.com/questions/63554174/how-to-deserialize-json-object-on-gridview
amanda212 iT邦新手 5 級 ‧ 2022-03-22 15:04:51 檢舉
已成功將物件塞到List
但無法將List以GridView呈現 :((
Homura iT邦高手 1 級 ‧ 2022-03-22 15:22:31 檢舉
你有什麼錯誤嗎?
沒放進gridview的datasource?
amanda212 iT邦新手 5 級 ‧ 2022-03-22 15:28:01 檢舉
放進gridview的datasource結果出現錯誤訊息
Homura iT邦高手 1 級 ‧ 2022-03-22 15:38:36 檢舉
24行不是這樣轉換吧..
改成
string recordStr = JsonConvert.SerializeObject(array);
List<RECORD> test = JsonConvert.DeserializeObject<List<RECORD>>(recordStr );
GridView1.DataSource = test;
amanda212 iT邦新手 5 級 ‧ 2022-03-22 15:45:52 檢舉
依舊失敗QQ
Homura iT邦高手 1 級 ‧ 2022-03-22 15:53:31 檢舉
完整的code和json貼出來吧...
不要用貼圖
amanda212 iT邦新手 5 級 ‧ 2022-03-22 16:33:52 檢舉
已成功印出GridView,謝謝!!!
Homura iT邦高手 1 級 ‧ 2022-03-22 16:35:18 檢舉
恭喜@@
不過還是建議直接把回復的完整json都建成class
就不用在那邊轉來轉去
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
純真的人
iT邦大師 1 級 ‧ 2022-03-22 12:39:14

我是VB寫法~你參考看看@@
https://ithelp.ithome.com.tw/questions/10202149

看更多先前的回應...收起先前的回應...
Homura iT邦高手 1 級 ‧ 2022-03-22 13:35:11 檢舉

現在直接把資料轉物件放進list比較好寫吧...

Homura
list物件可以下SQL指令查詢嗎??

Homura iT邦高手 1 級 ‧ 2022-03-22 14:21:22 檢舉

用dapper就能強型別了啊0.0

哈~反正都可以~

Homura iT邦高手 1 級 ‧ 2022-03-22 14:34:52 檢舉

不一樣
DataTable有夠難用/images/emoticon/emoticon04.gif

我會用DataTable是因為程式模組早就都套好~根本改一下幾段內容~就可以快速套上XD

0
japhenchen
iT邦超人 1 級 ‧ 2022-03-23 07:46:38

(啊我慣用Newtonsoft,真的比較好替資料塑形,高手炮小力一點)

1、不管你用EF5/6或DBML,一定會有個資料模型,阿就是資料庫的CLASS,如下為員工識別卡TABLE

    public class V_EmpCardno
    {
        public string EmpNo { get; set; }
        public string EmpCName { get; set; }
        public string CardNo { get; set; }
        public string 已離職 { get; set; }
        public char EmpType { get; set; }
        public string DeptCode { get; set; }
    }

2、後端(asp.net)

    protected void Page_Load(object sender, EventArgs e)
    {
        string act = Request.QueryString["act"];
        if (!string.IsNullOrEmpty(act))
        {
            if (act == "hr")
            {
                HRDataContext myHR = new HRDataContext();
                var data = myHR.V_EmpCardno.Where(p1 => p1.已離職 != "Y" && p1.CardNo.Trim() != "")
                    .OrderBy(o2 => o2.EmpNo)
                    .ToList<V_EmpCardno>();
                Response.Clear();
                Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(data));
                Response.End();
            }
        }
    }

前端程式(以Winform/為例)

void formload(){
    var data = JsonConvert.DeserializeObject<List<V_EmpCardno>>(getWebResp("hr")); //下方有這個getWebResp函數的完整碼,示範只用到GET方式
    foreach(var d in data.Where(p=>p.EmpCName.StartWith("陳")){
        // ...... data已經是List,上行只列出姓陳的所有人員,用Lambda
        Console.Writeline(d.EmpCName); 
    }
};


private string getWebResp(string v, string hostname = "www.yourcompany.com", List<KeyValuePair<string, string>> addKV = null)
{
    string targetUrl = $"https://{mainHostName}/getdata?act={v}";
    HttpWebRequest request = HttpWebRequest.Create(targetUrl) as HttpWebRequest;
    request.Method = "GET";
    request.ServerCertificateValidationCallback = delegate { return true; };
    request.ContentType = "application/x-www-form-urlencoded";
    request.Timeout = 15000;

    string result = "";
    // 取得網站方的回應資料
    try
    {
        using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
        {
            using (StreamReader sr = new StreamReader(response.GetResponseStream()))
            {
                result = sr.ReadToEnd();
            }
        }
    }
    catch (Exception e)
    {
        response.write($"錯誤發生:{e.Message}"
    }
    return result;
}





我要發表回答

立即登入回答