C# JSON SelectTokens表达式

C# JSON SelectTokens表达式,c#,json,json.net,C#,Json,Json.net,我有一个JSON文件(如下)。我的目标是用unit\u id(例如,在这个JSON中unit\u id是:153470,153471和178903)和相应的classtype\u id(例如,在这个JSON中对应的classtype\u id是:CW,CW,null)。(unit_id是统一的) 所以我的字典可能是:{[153470,CW],[153471,CW],[178903,null]} 但是,在我目前的方法中存在一个问题,因为有可能:“unit\u id”:null与此文件中的f.e.类

我有一个JSON文件(如下)。我的目标是用
unit\u id
(例如,在这个JSON中
unit\u id
是:
153470
153471
178903
)和相应的
classtype\u id
(例如,在这个JSON中对应的
classtype\u id
是:
CW
CW
null
)。(
unit_id
是统一的)

所以我的字典可能是:
{[153470,CW]
[153471,CW]
[178903,null]}

但是,在我目前的方法中存在一个问题,因为有可能:
“unit\u id”:null
与此文件中的f.e.类似:
“178903”:null

Dictionary<string, string> unit_id_translate = new Dictionary<string, string>();
var unitIdsTypes = JObject.Parse(unit_ids_json).SelectTokens("*.['classtype_id']");
var unitIdsNumbers = JObject.Parse(unit_ids_json);
List<String> tempForUID = new List<String>();
List<String> tempForVAL = new List<String>();

foreach (var unitIdType in unitIdsTypes)
{
    tempForVAL.Add(unitIdType.ToString());
}

foreach (var unitIdNumber in unitIdsNumbers)
{
    foreach (var tmp44 in unitIdNumber)
    {
        var trimmedNr = unitIdNumber.Cast<JProperty>().Select(o => o.Name);
        foreach (var unitIdNr in trimmedNr)
        {
                tempForUID.Add(unitIdNr);
        }
        break;
    }
}
for (int i = 0; i < tempForUID.Count(); i++)
{
    unit_id_translate.Add(tempForUID.ElementAt(i), tempForVAL.ElementAt(i));
}

您可以使用以下工具轻松完成此操作:

然后

产生
{“153470”:“CW”,“153471”:“CW”,“178903”:null}

{
  "153470": {
    "topics": {
      "en": ""
    },
    "classtype_id": "CW",
    "learning_outcomes": {
      "en": ""
    },
    "course_id": "06-DRSOLI0",
    "course_name": {
      "en": "Distributed operating systems"
    },
    "id": 153470,
    "teaching_methods": {
      "en": ""
    }
  },
    "153471": {
    "topics": {
      "en": ""
    },
    "classtype_id": "CW",
    "learning_outcomes": {
      "en": ""
    },
    "course_id": "06-DPROLI0",
    "course_name": {
      "en": "Team project"
    },
    "id": 153471,
    "teaching_methods": {
      "en": ""
    }
  },
    "178903": null,
}
        var unit_id_translate = JObject.Parse(unit_ids_json)
            .Properties()
            .ToDictionary(p => p.Name, p => (string)p.Value.SelectToken("classtype_id"));
        Console.WriteLine(JsonConvert.SerializeObject(unit_id_translate));