Как сделать запрос в JSON с использованием LINQ? - PullRequest
0 голосов
/ 03 октября 2018

JSON

{
  "count": 3,
  "value": [
    {
      "id": "AAAAAAAAAAAAA",
      "description": "test1",
      "name": "name1"
    },
    {
      "id": "BBBBBBBBBB",
      "description": "test2",
      "name": "name2"
    },
    {
      "id": "CCCCCCCCCCCC",
      "description": "test3",
      "name": "name3"
    }
  ]
}

У меня есть код в моем решении, получающий из API-интерфейса LIST и предоставляющий JSON выше.Как я могу использовать LINQ для получения определенных значений?(например) мне нужно выбрать name1, и я получу значения id, description, name.

Я использую переменную dynamic в своем коде:

dynamic json = JObject.Parse(client.GetString().Result);

Я возился с другими онлайн-гидами последние несколько часов.Однако, не могу получить правильный результат.

Пожалуйста, помогите.

Ответы [ 4 ]

0 голосов
/ 03 октября 2018

Видимо, поигравшись с моим кодом, я нашел ответ для себя.Спасибо за тех, кто пытается помочь мне за то, что дал мне идеи.

var requestWorkProcess = await client.GetStringAsync("my url");
var workProcessId = JObject.Parse(requestWorkProcess)["value"].Children<JObject>().FirstOrDefault(o => o["name"].ToString() == workProcess).GetValue("id");
0 голосов
/ 03 октября 2018

Одним из решений будет десериализация вашей строки JSON в объекты C #, а затем использование Linq для получения конкретного объекта.

Определения класса C #:

public class Content
{
    [JsonProperty("count")]
    public int Count { get; set; }

    [JsonProperty("value")]
    public List<Value> Values { get; set; }

    public Content()
    {
        Values = new List<Value>();
    }
}

public class Value
{
    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("description")]
    public string Description { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }
}

Десериализация и получение объекта:

string json = @"{
""count"": 3,
""value"": [
  {
    ""id"": ""AAAAAAAAAAAAA"",
    ""description"": ""test1"",
    ""name"": ""name1""
  },
  {
    ""id"": ""BBBBBBBBBB"",
    ""description"": ""test2"",
    ""name"": ""name2""
  },
  {
    ""id"": ""CCCCCCCCCCCC"",
    ""description"": ""test3"",
    ""name"": ""name3""
  }
]
}";


Content content = JsonConvert.DeserializeObject<Content>(json);

Value value = content.Values.FirstOrDefault(x => x.Name.Equals("name1", StringComparison.InvariantCultureIgnoreCase));
0 голосов
/ 03 октября 2018

Во-первых, вы можете создать класс для представления клиента:

public class Client
{
    public string Id { get; set; }
    public string Description { get; set; }
    public string Name { get; set; }
}

С этим классом вы можете использовать JObject.Parse (как вы уже делаете), чтобы проанализировать JSON во что-то, что можетчтобы получить запрос, используйте SelectToken, чтобы вытащить массив value, а затем используйте ToObject, чтобы преобразовать его в список Client с.Вот как это выглядит:

var jsonObject = JObject.Parse(json_source);
var jsonObjectValue = jsonObject.SelectToken("value");
var clients = jsonObjectValue.ToObject<List<Client>>();

Получив переменную clients, вы можете использовать простой оператор LINQ, чтобы найти тот, который name1:

var clientWithName1 = clients.SingleOrDefault(x => x.Name == "name1");

В этом случае clientWithName будет null, если такой клиент не найден.

Вот dotnetfiddle , который демонстрирует полное решение.

0 голосов
/ 03 октября 2018

Создание объекта Client, который имеет свойства id, description и name.Десериализовать JSON в список этих объектов.

List<Client> clients = JsonConvert.Deserialize<List<Client>>(json_source);
string desc = clients[0].description;
...