Могу ли я LINQ A 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# и десериализовывать его каждый раз.

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

3 51

3 ответа:

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