Reputation: 21
I'm trying to deserialize this piece of json here with JSON.NET through an API, and I just want to extract the names that represent each array, which are John, Marie and Bob. Is it possible to extract just the names of each array with a foreach or any kind of method?
Here is how I currently have it:
WebRequest request = WebRequest.Create("...API URL...");
WebResponse response = request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
response.Close();
var jss = new JavaScriptSerializer();
var dict = jss.Deserialize<Dictionary<string, dynamic>>(responseFromServer);
foreach (var item in dict["data"])
{
string arrayName= Convert.ToString(item["data"]["?array_names?"]);
Console.WriteLine(arrayName);
}
Data from JSON (responseFromServer)
{"data": {
"John": {
"id": 266,
"title": "Good old john",
"name": "John Shepard",
"key": "JS"
},
"Marie": {
"id": 412,
"title": "Helper Marie",
"name": "Marie Godfather",
"key": "MG"
},
"Bob": {
"id": 23,
"title": "Uncle Bob",
"name": "Bob Plane",
"key": "BP"
}
}}
[EDIT: Added missing {} at start and end, sorry]
Thanks in advance
Upvotes: 1
Views: 127
Reputation: 3002
var json = "{'data':{'John':{'id':266,'title':'Good old john','name':'John Shepard','key':'JS'},'Marie':{'id':412,'title':'Helper Marie','name':'Marie Godfather','key':'MG'},'Bob':{'id':23,'title':'Uncle Bob','name':'Bob Plane','key':'BP'}}}";
var jss = new JavaScriptSerializer();
var dict = jss.Deserialize<Dictionary<string, dynamic>>(json);
foreach (var item in dict["data"])
{
string arrayName = Convert.ToString(item.Key);
Console.WriteLine(arrayName);
}
// John
// Marie
// Bob
Upvotes: -1
Reputation: 3726
Assuming the valid json format - the follwing produces the result -
var json = "{'data':{'John':{'id':266,'title':'Good old john','name':'John Shepard','key':'JS'},'Marie':{'id':412,'title':'Helper Marie','name':'Marie Godfather','key':'MG'},'Bob':{'id':23,'title':'Uncle Bob','name':'Bob Plane','key':'BP'}}}";
var t = JObject.Parse(json)["data"];
foreach(JProperty j in t){
Console.WriteLine(j.Name);
} /*John
Marie
Bob*/
It is recommended to use JSON.Net for working with json data types.
Upvotes: 3