Могу ли я LINQ JSON?
Это JSON, который я получаю из запроса на.NET:
{
"id": "110355660738",
"picture": {
"data": {
"url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn2/1027085_12033235063_5234302342947_n.jpg",
"is_silhouette": false
}
}
}
и я хотел бы поймать поле "URL", используя (может быть?) LINQ. Я делаю много запросов, как это, что немного отличается. Поэтому я не буду создавать класс C# и десериализовать его каждый раз.
Это способ извлечь одно поле? Спасибо!
4 ответа
Нет необходимости в Linq, просто используйте dynamic
(используя Json.Net)
dynamic obj = JObject.Parse(json);
Console.WriteLine((string)obj.picture.data.url);
Версия на Linq не очень читаема
JObject jObj = JObject.Parse(json);
var url = (string)jObj.Descendants()
.OfType<JProperty>()
.Where(p => p.Name == "url")
.First()
.Value;
Документация: LINQ to JSON
Я бы не рекомендовал LINQ. Я бы порекомендовал библиотеку JSON, такую как newtonsoft.json.
Так что вы можете сделать это:
string json = @"{
""Name"": ""Apple"",
""Expiry"": "2008-12-28T00:00:00",
""Price"": 3.99,
""Sizes"": [
""Small"",
""Medium"",
""Large""
]
}";
JObject o = JObject.Parse(json);
string name = (string)o["Name"];
// Apple
JArray sizes = (JArray)o["Sizes"];
string smallest = (string)sizes[0];
// Small
Примечание:- этот код был скопирован из примеров, представленных на сайте проекта http://james.newtonking.com/pages/json-net.aspx
В привязке вы всегда можете десериализовать JSON, сериализовать его в XML и загрузить XML в XDocument. Тогда вы можете использовать классический Linq to XML. Когда вы закончите, возьмите XML, десериализуйте его и сериализовайте обратно в JSON в JSON. Мы использовали эту технику, чтобы добавить поддержку JSON в приложение, которое изначально было разработано для XML, и позволяло запускать и запускать практически нулевые модификации.
Вы можете легко запросить LINQ следующим образом
учитывая этот JSON
{
"items": [
{
"id": "10",
"name": "one"
},
{
"id": "12",
"name": "two"
}
]
}
поместим его в переменную с именем
json
нравится,
JObject json = JObject.Parse("{'items':[{'id':'10','name':'one'},{'id':'12','name':'two'}]}");
вы можете выбрать все идентификаторы из элементов, где имя
"one"
используя следующий запрос LINQ
var Ids =
from item in json["items"]
where (string)item["name"] == "one"
select item["id"];
Тогда у вас будет результат в списке IEnumerable.