在没有 foreach 的情况下迭代 JObject

Posted

技术标签:

【中文标题】在没有 foreach 的情况下迭代 JObject【英文标题】:Iterate JObject without foreach 【发布时间】:2021-01-10 13:14:48 【问题描述】:

这段代码运行良好我正在使用 foreach 循环迭代 JObject

HttpResponseMessage response = await clientHelper.PostAsJsonRequest("home/LoadPatientDetailData/2232565", new  );

        if (response.IsSuccessStatusCode)
        
            string s = await response.Content.ReadAsStringAsync();
            var x = JsonConvert.DeserializeObject(s);
            JObject y = JsonConvert.DeserializeObject<JObject>(x.ToString());
            int i = 0;
            foreach (KeyValuePair<string, JToken> xs in y)
            
                if(i == 0)
                
                    //data.outstandingTasks = xs.Value.ElementAt(0).ElementAt(0).ToObject<List<OutstandingTask>>();
                
                else if (i == 1)
                
                    data.outstandingPrompts = xs.Value.ElementAt(0).ElementAt(0).ToObject<List<OutstandingPrompts>>();
                
                else if (i == 2)
                
                    data.outstandingRecalls = xs.Value.ElementAt(0).ElementAt(0).ToObject<List<OutstandingRecalls>>();
                
                else if (i == 3)
                
                    //data.diagnosis = xs.Value.ElementAt(0).ElementAt(0).ToObject<List<Diagnosis>>();
                
                else if (i == 4)
                
                    data.measurments = xs.Value.ElementAt(0).ElementAt(0).ToObject<List<Measurments>>();
                
                i++;
            
            PatientDetailData xx = JsonConvert.DeserializeObject<PatientDetailData>(x.ToString());

        

有没有办法迭代它不使用foreach我尝试了几种方法,但他们没有工作。例如

KeyValuePair<string, JToken> q = y.First;
KeyValuePair<string, JToken> w = y[0];
KeyValuePair<string, JToken> h = (KeyValuePair<string, JToken>)y[0];
KeyValuePair<string, JToken> hs = y[0] as KeyValuePair<string, JToken>;
KeyValuePair<string, JToken> e = y["key"];
KeyValuePair<string, JToken> r= y.Value;

但它们都不起作用

【问题讨论】:

你的 json 长什么样子? @PavelAnikhouski Json 太大,无法在此处显示,但我可以解释当我将响应转换为 JObject 它有 5 个对象 和每个对象的 第二个孩子是我要访问的数组,您可以在 foreach 循环xs.Value.ElementAt(0).ElementAt(0).ToObject&lt;List&lt;OutstandingRecalls&gt;&gt;() 中看到这样我必须使用 i 检查我在哪个迭代,然后将响应相应地转换为某个对象,现在我在说什么我不能使用它的索引来访问 JObject 子对象,比如 y[0] 等所以我只需要写五行而不是这个 foreach 循环 【参考方案1】:

你到底想做什么?将其转换为 &lt;Key,Value&gt; 对后,您可能会使用某些 LINQ 查询

var y = xs.Where(d => d.Key == "some_key").Select(v => ((JValue) v.Value).Value);

【讨论】:

正是我只想将它转换为 对但不使用 foreach 循环我不能使用索引访问 JObject(在这种情况下是 y) ??如您所见,我正在使用 foreach 进行投射,但我无法使用索引进行投射,因为 问题结尾 我向您展示了一些我尝试投射它的方法,但它们都不起作用

以上是关于在没有 foreach 的情况下迭代 JObject的主要内容,如果未能解决你的问题,请参考以下文章

如何在PHP的foreach循环中重复特定的迭代?

Mybatis 中 foreach 用法

如何跳过“foreach”循环的迭代?

angularjs中的foreach循环

ArrayList在foreach正常迭代删除不报错的原因

代码没有在 ForEach 语句中迭代