解决方案 »

  1.   


    求指教 这种行不行:,顺便像如题这种Json是不是标准格式的Json数据啊?
    url = "http://localhost:9095/" + url;
                string html = "";
                WebRequest request;
                Encoding encoding = Encoding.GetEncoding("gb2312");
                request = WebRequest.Create(url); 
                request.Credentials = CredentialCache.DefaultCredentials; 
                request.Timeout = 20000; 
                WebResponse response;
                response = request.GetResponse(); 
                html = new StreamReader(response.GetResponseStream(), encoding).ReadToEnd();
                return html;
      

  2.   

    C#对于Http协议的操作,有封装好的HttpWebRequest和HttpWebResponse类。对于json的解析的话,一般通过序列化和反序列化,反序列化成一个数据实体对象。json操作的话,好像有System.Web.Serialize.javascript下面有一个ScriptConverter?反正C#是内置了一个json的序列化类。另外可以用json.net(Newtonsoft.Json.dll)。
      

  3.   


      private string Getjson()
        {
           
            string getWeatherUrl = "http://localhost:9095/pda/justifyBin/startup.do?j_passport=892"; 
            WebRequest webReq = WebRequest.Create(getWeatherUrl);
            WebResponse webResp = webReq.GetResponse();
            Stream stream = webResp.GetResponseStream();
            StreamReader sr = new StreamReader(stream, Encoding.UTF8);
            string html = sr.ReadToEnd();
            sr.Close();
            stream.Close();
            return html;
        }
      
            string s = Getjson();       
            JObject jo = (JObject)JsonConvert.DeserializeObject(s);
            MessageBox.Show(jo["success"].ToString());
            JToken js = (JToken)jo["data"];
            MessageBox.Show(js["id"].ToString());
            MessageBox.Show(js["bin"].ToString());
            MessageBox.Show(js["targetBin"].ToString());
            MessageBox.Show(js["batchs"][0].ToString());
            MessageBox.Show(js["batchs"][1].ToString());
      

  4.   

    Quote: 引用 1 楼 guwei4037 的回复:

    http://bbs.csdn.net/topics/390566726
    http://blog.csdn.net/chinacsharper/article/details/9246627[/quote{success:true,data:{ id: 100001,code:” JTL-Z38005”,name:” 奥迪三轮毂”,location:” A-202”,qty:100,bins:[{code:” “JTL-Z38001”,name:” 奥迪三轮毂”,location:” A-001”,qty:100},{ code:” JTL-Z38002”,name:” 奥迪三轮毂”,location:” A-002”,qty:100}]}版主大人求救,这样的Json如何解析?  他红色的部分可能会有多个、、、应该怎么弄啊
      

  5.   

    那是否说我只要在 定义实体类的时候,要把batchs:[“B20140101”,” B20140102”]}}  定义成为数组?public string[] batchs 这样?
    如果 batchs 里面是batchs :[{code:” “JTL-Z38001”,name:” 奥迪三轮毂“},{ code:” JTL-Z38002”,name:” 奥迪三轮毂}]} 那这样我该如何定义呢?
      

  6.   

    ;
                JArray jar = JArray.Parse(js["batchs "].ToString());
                for (var i = 0; i < jar.Count; i++)
                {
                    JObject j = JObject.Parse(jar[i].ToString());
                    MessageBox.Show(j["code"].ToString());
                    MessageBox.Show(j["name"].ToString());
                }
       
      

  7.   

    在建立一个对象public object[] batchsobject:对象名称那是否说我只要在 定义实体类的时候,要把batchs:[“B20140101”,” B20140102”]}}  定义成为数组?public string[] batchs 这样?
    如果 batchs 里面是batchs :[{code:” “JTL-Z38001”,name:” 奥迪三轮毂“},{ code:” JTL-Z38002”,name:” 奥迪三轮毂}]} 那这样我该如何定义呢?
      

  8.   


      s = "{success:true,data:{ id: 100001, bin:\"JIT-3JS-2\",targetBin:\"JIT-3JS-3K\",batchs:[{code:\"JTL-Z38001\",name:\"奥迪三轮毂\"},{ code:\"JTL-Z38002\",name:\"奥迪三轮毂\"}]}}";
            JObject jo = (JObject)JsonConvert.DeserializeObject(s);
            //MessageBox.Show(jo["success"].ToString());
            JToken js = (JToken)jo["data"];
            //MessageBox.Show(js["id"].ToString());
            //MessageBox.Show(js["bin"].ToString());
            //MessageBox.Show(js["targetBin"].ToString());
            MessageBox.Show(js["batchs"][0]["code"].ToString());
            MessageBox.Show(js["batchs"][0]["name"].ToString());
            MessageBox.Show(js["batchs"][1]["code"].ToString());
            MessageBox.Show(js["batchs"][1]["name"].ToString());
            or 
     s = "{success:true,data:{ id: 100001, bin:\"JIT-3JS-2\",targetBin:\"JIT-3JS-3K\",batchs:[{code:\"JTL-Z38001\",name:\"奥迪三轮毂\"},{ code:\"JTL-Z38002\",name:\"奥迪三轮毂\"}]}}";
            JObject jo = (JObject)JsonConvert.DeserializeObject(s);
            //MessageBox.Show(jo["success"].ToString());
            JToken js = (JToken)jo["data"];
            //MessageBox.Show(js["id"].ToString());
            //MessageBox.Show(js["bin"].ToString());
            //MessageBox.Show(js["targetBin"].ToString());
          JArray jar = JArray.Parse(js["batchs"].ToString());
            for (var i = 0; i < jar.Count; i++)
            {
                JObject j = JObject.Parse(jar[i].ToString());
                MessageBox.Show(j["code"].ToString());
                MessageBox.Show(j["name"].ToString());
            }
      

  9.   

    我去 这种方式我一编译就报错:
    类型“System.ComponentModel.ITypedList”在未被引用的程序集中定义。必须添加对程序集“System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”的引用,我已经引用了 using Newtonsoft.Json.Linq;
    using Newtonsoft.Json;,他字体都变了绿色了,求解?
      

  10.   

    下个比Newtonsoft.Json.dll(4.5)低的版本试一下,我用的是4.5版本的
      

  11.   


    低版本都 没得TObject了
      

  12.   

    换种方式:
      s = "{success:true,data:{ id: 100001, bin:\"JIT-3JS-2\",targetBin:\"JIT-3JS-3K\",batchs:[{code:\"JTL-Z38001\",name:\"奥迪三轮毂\"},{ code:\"JTL-Z38002\",name:\"奥迪三轮毂\"}]}}";        var serializer = new JavaScriptSerializer();
            var ret = serializer.Deserialize<dynamic>(s);
            dynamic value = serializer.DeserializeObject(s);
            int key1 = value["data"]["id"];
            string key2 = value["data"]["bin"];
            string key3 = value["data"]["targetBin"];
            object[] key4 = value["data"]["batchs"];
      

  13.   


     object[] key4 = value["data"]["batchs"];   
            foreach (object obj in key4)
            {
                Dictionary<string, object> result = (Dictionary<string, object>)obj;          
                string code1 = result["code"].ToString();
                string name1 = result["name"].ToString();        }