1

我有一个 Json 响应,其中包含多个数组,我需要从中获取最后一个数组。我想选择 ExpenseDescriptions 并将其返回给使用 Linq 的 ajax 调用。ExpenseDescription 始终是返回的最后一个数组。我的回复结构如下:

{
"Data": {
    "Items": [
        {
            "Result": {
                "Id": "Some Data"
            }
        },
        {
            "Result": {
                "Id": "Some More Data"
            }
        },
        {
            "Result": {
                "ExpenseDescriptions": [
                    {
                        "Code": "TRH8",
                        "Description": "Some Description",
                        "UnitCost": 0,
                        "MaxThreshold": 0,
                        "MinThreshold": 0
                    },
                    {
                        "Code": "VVFT3",
                        "Description": "Some Description",
                        "UnitCost": 0,
                        "MaxThreshold": 0,
                        "MinThreshold": 0
                    }
                ]
            }
        }
    ]
}
}

我可以使用 linq 做一些基本的条款,但无法弄清楚或找到让我做上述事情的方法。对于使用 Linq 执行此操作的任何帮助,我们将不胜感激。

4

1 回答 1

1

这是使用 Newtonsoft.Json.Linq 的解决方案:

using System;
using System.Linq;
using System.Text;
using Newtonsoft.Json.Linq;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            string json = @"{'Data': {
    'Items': [
        {
            'Result': {
                'Id': 'Some Data'
            }
        },
        {
            'Result': {
                'Id': 'Some More Data'
            }
        },
        {
            'Result': {
                'ExpenseDescriptions': [
                    {
                        'Code': 'TRH8',
                        'Description': 'Some Description',
                        'UnitCost': 0,
                        'MaxThreshold': 0,
                        'MinThreshold': 0
                    },
                    {
                        'Code': 'VVFT3',
                        'Description': 'Some Description',
                        'UnitCost': 0,
                        'MaxThreshold': 0,
                        'MinThreshold': 0
                    }
                ]
            }
        }
    ]
}
}";
            JObject jsonobject = JObject.Parse(json);

            var last_array = jsonobject.Descendants().Last(x => x.Type == JTokenType.Array);

            foreach (var e in last_array)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }
}

输出:

{
  "Code": "TRH8",
  "Description": "Some Description",
  "UnitCost": 0,
  "MaxThreshold": 0,
  "MinThreshold": 0
}
{
  "Code": "VVFT3",
  "Description": "Some Description",
  "UnitCost": 0,
  "MaxThreshold": 0,
  "MinThreshold": 0
}
于 2012-10-16T11:03:07.217 回答