Могу ли я 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.

Другие вопросы по тегам