none
JSON解析問題? RRS feed

  • 問題

  • 請教一下,現在要取得廠商所提供的資訊(json),目前撈回來的資訊似乎沒辦法解析,是我的寫法有問題嗎??

    "{\"items\":{\"1\":{\"ID\":\"CHE2015100101\",\"NAME\":\"CHE2015100101.csv\",\"PATH\":\"download\\/inv_check\\/CHE2015100101.csv\"}}}"

    public class Item_list_inv
            {
                public string ID{ get; set; }
                public string NAME{ get; set; }
                public string PATH { get; set; }
            }
            public class RootObject_list_inv
            {
                public List<Item_list_inv> items { get; set; }
            }

    //解析->這行就會出現問題了

    RootObject_list_inv root = JsonConvert.DeserializeObject<RootObject_list_inv>(result);


    2015年10月1日 上午 01:59

解答

所有回覆

  • 這個json 有三層
    不過解析那行出現甚麼問題?!!?  應該就解析不出甚麼東西 給null而已吧!

            public class list
            {
                public one items { get; set; }
            }
    
            public class one
            {
                [JsonProperty("1")]
                public cls o { get; set; }
            }
    
            public class cls
            {
                public string ID { get; set; }
                public string NAME { get; set; }
                public string PATH { get; set; }
            }




    2015年10月1日 上午 02:48
  • 再請教一個問題,如果 第2層有2個以上的資料,就要寫多個class one了嗎??

    例如這種的:

    "{\"items\":{\"1\":{\"k_id\":\"1\",\"CODE\":\"0100601011\",\"ID\":\"52\",\"COUNTRY\":\"KR\",\"NAME\":\"\韓\國 \\",\"WEIGHT\":\"7\"},\"2\":{\"k_id\":\"1\",\"CODE\":\"0100803036\",\"ID\":\"357\",\"COUNTRY\":\"MY\",\"NAME\":\"\馬\來\西\亞\",\"WEIGHT\":\"17\"}}}"

    目前其他的撈法都是用下方的方法把json資料給取出來,如果第2層是數字再變動的話,請問要如何處理呢??

    foreach (Item_list_inv result_box in root.items)
                    {
                        var lvi = new ListViewItem(result_box.ID);
                        lvi.SubItems.Add(result_box.NAME);
                        lvi.SubItems.Add(result_box.PATH);
                        listView1.Items.Add(lvi);
                    }


    2015年10月1日 上午 03:17
  • 你可以嘗試 用Dictionary<int,cls>去接你的資料

    看起來 你的json格式 是這樣告訴你的 1:{},2:{},.....n:{}

    另外, json 韓國跟馬來西亞那邊的斜線是正常的嗎?!?

    2015年10月1日 上午 03:47
  • 朋友用php方式撈出來到是沒有斜線,用C#得到的json格式反而會有斜線,但是取該物件.NAME反而正常(斜線都會去掉),下方是我撈json格式的方法 

     string targetUrl = "https://www.xxx.xx/xxx.php";
                    string parame = "item=xxx";
                    byte[] postData = Encoding.UTF8.GetBytes(parame);

                    //SSL需要增加的部分
                    System.Net.ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();

                    HttpWebRequest request = HttpWebRequest.Create(targetUrl) as HttpWebRequest;
                    request.Method = "POST";
                    request.ContentType = "application/x-www-form-urlencoded";
                    request.Timeout = 30000;
                    request.ContentLength = postData.Length;
                    // 寫入 Post Body Message 資料流
                    using (Stream st = request.GetRequestStream())
                    {
                        st.Write(postData, 0, postData.Length);
                    }

                    string result = "";
                    // 取得回應資料
                    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                    {
                        using (StreamReader sr = new StreamReader(response.GetResponseStream()))
                        {
                            result = sr.ReadToEnd();

                        }
                    }


    //"無法和遠端伺服器建立信任關係" 這是跟SSL有關的問題
            internal class AcceptAllCertificatePolicy : ICertificatePolicy
            {
                public AcceptAllCertificatePolicy()
                {
                }

                public bool CheckValidationResult(ServicePoint sPoint, System.Security.Cryptography.X509Certificates.X509Certificate cert,
                WebRequest wRequest, int certProb)
                {
                    // Always accept
                    return true;
                }
            }

    2015年10月1日 上午 04:09
  • 你好,vs2008可以用下面這個方法嗎?,我執行會有問題

    public Dictionary<int, cls> items { get; set; }

    2015年10月1日 上午 06:09
  • VS2008可以 記得引入命名空間

    using System.Collections.Generic;

    https://msdn.microsoft.com/zh-tw/library/xfhwa508(v=vs.110).aspx

    還有上面的cls本身是要自己定義的class

    你執行會有問題 請問一下是甚麼樣的問題 有甚麼樣的錯誤訊息!!

    • 已標示為解答 Randice_d 2015年10月1日 上午 06:28
    2015年10月1日 上午 06:12
  • 問題已經解決了,cls是我自己會錯意思了,而裡面的設定沒有調整完畢才會發生錯誤,root.items ->更改為 root.items.Values 就能順利取得資料了,謝謝你花時間幫我解答

    foreach (Item_mac_type result_box in root.items.Values)
                    {
                        DataRow ADR = ADt.NewRow();
                        if (i == 1)
                        {
                            ADR[0] = "不限";
                            ADR[1] = "不限";
                            ADt.Rows.Add(ADR);
                            i++;
                        }
                        else
                        {
                            ADR[0] = result_box.PROD_CODE;
                            ADR[1] = result_box.PROD_NAME;
                            ADt.Rows.Add(ADR);
                        }

                    }

    2015年10月1日 上午 06:28