Могу ли я 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. Я делаю много запросов, так как это немного отличается. Поэтому я не буду создавать класс С# и десериализовать его каждый раз.
Это способ извлечь одно поле? Спасибо!
Ответы
Ответ 1
Нет необходимости в 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
Ответ 2
Я бы не рекомендовал 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
Ответ 3
В связывании вы всегда можете десериализовать JSON и сериализовать его в XML и загрузить XML в XDocument. Затем вы можете использовать классический Linq для XML. Когда вы закончите, возьмите XML, десериализуйте его и сериализуйте его обратно в JSON в JSON. Мы использовали эту технику для добавления поддержки JSON к приложению, которое изначально было построено для XML, и позволило получить почти нулевые модификации для запуска и запуска.