首页 > 解决方案 > 如何通过 Foreach/LINQ 遍历 JObject 属性

问题描述

我有一个已建立的 JObject 对象。尝试遍历它以获取基于另一个键/值的键/值(下面的 json 示例,代码当前卡在上面)

更多细节 - 寻找循环“值”,获取基于“MailState”的“KeyID”

绝对觉得我显然错过了通过 MailState/ColName 过滤的步骤 - 我已经搜索了一堆线程,但如果有人知道一个回答了这个我无法找到的人,我会很乐意把它拉下来/参考它

// JSON DATA
{
    "odata.metadata": "https://..com/odata/$metadata#JCJMCDXes",
    "value": [
        {
            "KeyID": "10379",
            "MailCity": "Chicago",
            "MailState": "IL"
        },
        {
            "KeyID": "9846",
            "MailCity": "Chicago",
            "MailState": "IL"
        },
        {
            "KeyID": "2234",
            "MailCity": "Madison",
            "MailState": "WI"
        }]
}

// Current code example

// class in play
public class datastorage
{
  public string ID { get; set; }
  public string Col { get; set; }
}

public class listData
{
  public string ColName {get;set;}
}

// getVPData is a string response from a call to an API
getVPData.Replace(System.Environment.NewLine, "");

JObject jobj = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(getVPData);

List<datastorage> data = new List<datastorage>();

// Loop
foreach(var r in listData) // has distinct State abeviations so only 1 occurence
{
foreach (var j in jobj) // This the right path?
{
  //add KeyID into ID
  data.add(new datastorage
    {
     ID = ,//add KeyID into ID
     Col = r.ColName
    });
}
}

标签: c#jsonlinq

解决方案


您可以使用Newtonsoft.Json库来解析和循环到项目value

这是一个示例代码:

dynamic json = JsonConvert.DeserializeObject(getVPData);
foreach (dynamic item in json["value"])
{
   //you can access the fields inside value.
    var KeyID = item["KeyID"];
    var MailCity = item["MailCity"];
    var MailState = item["MailState"];

    //just for showing...
    Console.WriteLine("KeyID:{0}, MailCity:{1}, MailState:{2}", KeyID, MailCity, MailState);
}

让我知道该片段是否有效。


推荐阅读