我看了一下就2层,如果这个是固定的话,那么先循环外层,每一层再算 里面的个数 StringBuilder sb = new StringBuilder();    
                string str = "[{ID:'1',Name:'John',Other:[{Age:'21',Sex:'0'}]},{ID:'2',Name:'Good',Other:[{Age:'36',Sex:'1'}]}]";    
                JavaScriptArray javascript = (JavaScriptArray)JavaScriptConvert.DeserializeObject(str);    
    
                for (int i = 0; i < javascript.Count; i++ )    
                {    
                    JavaScriptObject obj = (JavaScriptObject)javascript[i];    
                    sb.Append("ID:" + obj["ID"].ToString());    
                    sb.Append("Name:" + obj["Name"].ToString());    
                    JavaScriptArray json = (JavaScriptArray)obj["Other"];    
    
                    for (int j = 0; j < json.Count; j++){    
                        JavaScriptObject jsonobj = (JavaScriptObject)json[j];    
                        sb.Append("Age:" + jsonobj["Age"].ToString());    
                        sb.Append("Sex:" + jsonobj["Sex"].ToString());    
                    }    
                }    注意:新版的Newtonsoft.Json的 JavaScriptArray 换成JObect了
上面给的给规则的,不规则一样用

解决方案 »

  1.   

    外层的时间key不规则 个数也不固定 
      

  2.   

    个数不固定不要紧,规则得固定,要不循环也没办法,只能手动一个个根据Key(通过下标)来找Value了不过我看你发的上面的字符串 ,外层还是很标准的.应该没特殊情况吧
      

  3.   


     JObject obj = JObject.Parse("");
                    foreach (KeyValuePair<string,JToken> item in obj)
                    {
                        string key = item.Key;
                        JArray value = (JArray)item.Value;
                    }
      

  4.   

    JObject.Parse里面的参数就是你的json
      

  5.   

    Dictionary<DateTime,List<SomeClass>>你用这个去反序列化
      

  6.   

    Dictionary<DateTime,List<T>> dic;//
    var list = (from d in dic
                    let l = d
                    from t in l
                    select t).ToList();
      

  7.   

    from d in dic.Values
      

  8.   

    给大家一个测试后的代码:static void Main(string[] args)
            {
                var path = "../../json.txt";
                var jsonString = System.IO.File.ReadAllText(path);
                Console.WriteLine(jsonString);            var jsonObj = JObject.Parse(jsonString) as JObject;
                Console.WriteLine(jsonObj);            ProcessJObject( jsonObj);            // 遍历所有的属性
                var enumerator = jsonObj.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    var current = enumerator.Current;
                    if (current.Value is JArray)
                    {
                        var array = current.Value as JArray;
                        for (int i = 0; i < array.Count; i++)
                        {
                            var item = array[i] as JObject;
                            ProcessJObject( item);
                        }
                    }
                }        }static void ProcessJObject(JObject target)
            {
                var enumerator = target.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    var current = enumerator.Current;
                    Console.WriteLine(current.Key);
                    Console.WriteLine(current.Value);
                }
            }