JSON deserialization with JSON.net: basics


I’ve been contemplating an article about handling JSON for some time now, but it turned out to be a rather long article and writing extremely large blog posts is someone else’s trade mark these days ;-). So I’d thought to try something new, and write a short series in three parts.
- Part 1 handles the basics
- Part 2 handles advanced deserialization with class hierarchies
- Part 3 handles a caching-and-updating scenarios.
And this is part 1 ;-)
This whole article actually boils down to one line of code, but I need to go to some hooplah to show you how to use it. It all begin with the data. Consider this piece of quite readable piece of JSON, describing a few recent Windows Phone models.
[
{
"Brand": "Nokia","Type" : "Lumia 800",
"Specs":{"Storage" : "16GB", "Memory": "512MB","Screensize" : "3.7"}
},
{
"Brand": "Nokia", "Type" : "Lumia 710",
"Specs":{"Storage" : "8GB","Memory": "512MB","Screensize" : "3.7"}
},
{ "Brand": "Nokia","Type" : "Lumia 900",
"Specs":{"Storage" : "8GB", "Memory": "512MB","Screensize" : "4.3" }
},
{ "Brand": "HTC ","Type" : "Titan II",
"Specs":{"Storage" : "16GB", "Memory": "512MB","Screensize" : "4.7" }
},
{ "Brand": "HTC ","Type" : "Radar",
"Specs":{"Storage" : "8GB", "Memory": "512MB","Screensize" : "3.8" }
}
]
JSON is rather compact, which is a great feature when you are developing for a mobile devices. It has also a few downsides as far as client programming is concerned:
- generating client code for it that does all the parsing and calling, as for SOAP, is not a standard feature of Visual Studio,
- it’s almost impossible to read for an ordinary human being,
- deciphering it into classes is a lot of work,
- hand coding a parser for it is not fun.
Which is why you don’t. There are several ways of generating classes from JSON, the simplest way is this website: json2csharp by Jonathan Keith. You copy a JSON result into the upper textbox, hit the “Generate” button and out come your classes:
There are more sites that do the same, by the way, but this is what I use. Next steps:
- Fire up Visual Studio
- Create a new Windows Phone project (for instance JsonDemo)
- Plonk the classes generated above in the project. Bonus cookies if you split them in separate files and add namespaces to them. Bonus donut if you, like me, think “RootObject” is actually a pretty ugly name for an object and change it to Phone.
- Click Tools/Library Package Manager/Manage NuGet Packages for Solution (you do have the NuGet Package Manager installed, don’t you? If not, stop whatever you are doing now and get it