Я предполагаю, что вы хотите получить доступ ко всем вложенным парам ключ-значение в элементе pto_seconds и предположить, что структура json всегда такая, как было указано в примере.
Вот полный код переберите список и получите значения. Мое второе предположение - значения типа long
, поэтому я использовал jToken.First().Value<long>()
. Если это decimal
или другие типы, вы можете изменить его соответствующим образом.
var jObject = JsonConvert.DeserializeObject<JObject>(json);
var jTokenList = jObject["results"]["payroll_report"]["314568"]["pto_seconds"].Children().ToList();
foreach (var jToken in jTokenList)
{
var ptoSecondKey = (jToken as JProperty).Name;
var ptoSecondValue = jToken.First().Value<long>();
}
Альтернативный метод (без использования JObject): Вы можете иметь представление реального объекта вашей JSON структуры и вы можете использовать метод DeserializeObject<T>
для анализа и возврата результатов в качестве вашего объекта.
Здесь ниже вы можете найти классы для вашего JSON:
public class ResultsMain
{
[JsonProperty("results")]
public ResultsDetail Results { get; set; }
}
public class ResultsDetail
{
[JsonProperty("payroll_report")]
public PayrollReport PayrollReport { get; set; }
}
public class PayrollReport
{
[JsonProperty("314568")]
public PayrollReportDetail Detail { get; set; }
}
public class PayrollReportDetail
{
[JsonProperty("pto_seconds")]
public Dictionary<string, long> PtoSeconds { get; set; }
}
Для десериализации JSON к вашему типу. NET, вам нужно ниже одной строки кода:
var resultsMain = JsonConvert.DeserializeObject<ResultsMain>(json);
Вот снимок объекта resultMain: ![pto_seconds values in debug mode](https://i.stack.imgur.com/E5xEs.png)