2016-12-27 8 views
0

Я пытаюсь восстановить Value используя Key в JSON.Извлечение значения из строки JSON

Я пробовал следующее, но никто не работал.

1.)

string email= json.emailAddress; 

2.)

string email= json["emailAddress"].ToString(); 

Полный код

var api= new Uri("https://api.linkedin.com/v1/people/~:(picture-url)?format=json"); 
using (var webClient = new WebClient()) 
{ 
     webClient.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + token); 

     webClient.Headers.Add("x-li-format", "json"); 

     dynamic json = webClient.DownloadString(api); 
    } 

JSON вернулся

{ 
    "emailAddress": "[email protected]", 
    "firstName": "xxx", 
    "formattedName": "xxxx xxxx", 
    "id": "xxxxxx", 
    "lastName": "xxxxxx", 

} 
+0

Есть времена, когда 'dynamic' хорошо использовать, но если вы знаете, тип возвращаемого значения метода вы должны объявить переменную этого типа, то есть' строка JSON = webClient.DownloadString (API); ' , Использование 'dynamic' не дает ваших переменных магических свойств - если это' string', это все равно 'string' с' dynamic'. – Enigmativity

ответ

4

Чтобы ответить на ваш вопрос, используя свой подход, самый простой способ (без использования Json.NET) является использование JavaScriptSerializer

// have this at the top with your using statements 
using System.Web.Script.Serialization; 

и в коде, используйте JavaScriptSerializer, как показано ниже.

var api= new Uri("https://api.linkedin.com/v1/people/~:(picture-url)?format=json"); 
using (var webClient = new WebClient()) 
{ 
    webClient.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + token);  
    webClient.Headers.Add("x-li-format", "json"); 
    string json = webClient.DownloadString(api); 

    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    dynamic data = serializer.Deserialize<object[]>(json); 
    string emailAddress = data.emailAddress; 
    } 

Лучше всего было бы создать сильный типизированных Pocos для данных JSON возвратных используя что-то вроде http://json2csharp.com/, а затем десериализации с помощью Json.NET Library.

+1

Все приведенные здесь ответы отлично работают. Вы полагаете, что ответ @Mohit - лучший способ пойти дальше? – Illep

1
result={ 
     "emailAddress": "[email protected]", 
     "firstName": "xxx", 
     "formattedName": "xxxx xxxx", 
     "id": "xxxxxx", 
     "lastName": "xxxxxx" 
     } 
var ser = new JavaScriptSerializer(); 
var people = ser.Deserialize<object[]>(result); 
foreach(var obj in people) 
{ 
    Email = obj.emailAddress; 
    ... 
} 
+0

Благодарим вас за ответ. Ваше решение также работает. – Illep

3

Вы можете установить Newtonsoft Json.Net для извлечения значения из строки JSON. Вы можете просто создать класс, например

public class Rootobject 
{ 
    public string emailAddress { get; set; } 
    public string firstName { get; set; } 
    public string formattedName { get; set; } 
    public string id { get; set; } 
    public string lastName { get; set; } 
} 

и затем десериализуйте его простым кодом одной строки.

var ser = JsonConvert.DeserializeObject<Rootobject>(YourJsonString); 
Console.WriteLine(ser.emailAddress); 
+0

Благодарим вас за ответ. Ваше решение также работает. – Illep

Смежные вопросы