Ahmed Jalal Ahmed Jalal - 6 months ago 9
JSON Question

Read specific object data from json

I want to get specific object data from json from url the following code give me. i need the second object 'EmailAddressSuffices'
enter image description here

WebRequest request = WebRequest.Create(
"https://atea-dev.accesscontrol.windows.net/v2/metadata/IdentityProviders.js?protocol=wsfederation&realm=https%3a%2f%2flocalhost%3a44300%2fAccount%2fLoginCallback%2f&reply_to=https%3a%2f%2flocalhost%3a44300%2fAccount%2fLoginCallback%2f&context=&request_id=&version=1.0&callback=");
request.Credentials = CredentialCache.DefaultCredentials;
WebResponse response = request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();

Answer

Using JSON.Net you can deserialize the JSON response easily:

Solution 1

1. Create a class to map your JSON into:

public class ResponseObject
{

    [JsonProperty("Name")]
    public string Name { get; set; }

    [JsonProperty("LoginUrl")]
    public string LoginUrl { get; set; }

    [JsonProperty("LogoutUrl")]
    public string LogoutUrl { get; set; }

    [JsonProperty("ImageUrl")]
    public string ImageUrl { get; set; }

    [JsonProperty("EmailAddressSuffixes")]
    public IList<string> EmailAddressSuffixes { get; set; }
}

2. Deserialize your JSON using JsonConvert.Deserialize<ResponseObject>()

var myresponse = JsonConvert.DeserializeObject<List<ResponseObject>>(responseFromServer);
string email = myresponse[1].EmailAddressSuffixes[0];

Solution 2

If you don't want to bother with derializing the entire thing then you can do this:

JArray array = JArray.Parse(responseFromServer);
string q = array[1]["EmailAddressSuffixes"][0].ToString();

But you should make sure that your object has the right format (and the right number of items in the array.

Comments