the json file's structure which I will deserialize looks like below;
{
"id" : "1lad07",
"text" : "test",
"url" : "http:\/\/twitpic.com\/1lacuz",
"width" : 220,
"height" : 84,
"size" : 8722,
"type" : "png",
"timestamp" : "Wed, 05 May 2010 16:11:48 +0000",
"user" : {
"id" : 12345,
"screen_name" : "twitpicuser"
}
}
I have created a class which has the filed names as properties for JavaScriptSerializer. The code which I will use to Deserialize the json is as follows;
using (var reader = new StreamReader(twitpicResponse.GetResponseStream())) {
var responseBody = reader.ReadToEnd();
var deserializer = new JavaScriptSerializer();
var results = deserializer.Deserialize<Response>(responseBody);
}
My problem is how I can read the user field on json file. which is like below;
"user" : {
"id" : 12345,
"screen_name" : "twitpicuser"
}
it has sub properties and values. how can I name them on my Response class. my response class now look like this;
public class Response {
public string id { get; set; }
public string text { get; set; }
public string url { get; set; }
public string width { get; set; }
public string height { get; set; }
public string size { get; set; }
public string type { get; set; }
public string timestamp { get; set; }
}
what is the best case to do it?
For .Net 4+:
For .Net 2/3.5: This code should work on JSON with 1 level
samplejson.aspx
And for a 2 level JSON:
sample2.aspx
Create a sub-class User with an id field and screen_name field, like this:
User
.Add a property to the Response class 'user' with the type of the new class for the user values
User
.In general you should make sure the property types of the json and your CLR classes match up. It seems that the structure that you're trying to deserialize contains multiple number values (most likely
int
). I'm not sure if theJavaScriptSerializer
is able to deserialize numbers into string fields automatically, but you should try to match your CLR type as close to the actual data as possible anyway.Assuming you don't want to create another class, you can always let the deserializer give you a dictionary of key-value-pairs, like so:
You'll get back something, where you can do:
Look at
result
in the debugger to see, what's in there.