Как сделать запрос в JSON с использованием LINQ?
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 ответа
Одним из решений было бы десериализовать вашу строку 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));
Во-первых, вы можете создать класс для представления клиента:
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
s. Вот как это выглядит:
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, который демонстрирует полное решение.
Создайте объект Client, у которого есть свойства id, description и name. Десериализовать JSON в список этих объектов.
List<Client> clients = JsonConvert.Deserialize<List<Client>>(json_source);
string desc = clients[0].description;
Видимо, поигравшись с моим кодом, я нашел ответ для себя. Спасибо за тех, кто пытается помочь мне за то, что дал мне идеи.
var requestWorkProcess = await client.GetStringAsync("my url");
var workProcessId = JObject.Parse(requestWorkProcess)["value"].Children<JObject>().FirstOrDefault(o => o["name"].ToString() == workProcess).GetValue("id");