Подтвердить что ты не робот

Могу ли я 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. Я делаю много запросов, так как это немного отличается. Поэтому я не буду создавать класс С# и десериализовать его каждый раз.

Это способ извлечь одно поле? Спасибо!

4b9b3361

Ответ 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, и позволило получить почти нулевые модификации для запуска и запуска.