Windows Phone 7

wp7–JSON parsing

Peter Daukintis

I’m writing this mainly as a central place to store this code as I need to use it frequently – hopefully it will help others also.

Supposing I have a web service that I want to call that returns me some JSON data. I want to get that from the service and into a class which I will use as a domain model in my application. The first thing to do is to make sure that we understand the hierarchy that the JSON data represents. So for example,

{ IsSuccess: true }

is an object with a boolean property ‘IsSuccess’ which in this case is true. So we can read the {}’s as enclosing an object.

[{ IsSuccess: true },{ IsSuccess: false }]  

This represents an array of objects; read the []’s as enclosing an array.

Here’s a slightly more complicated example:

// start
{
   "FleetsCollection":[
      {
         "FleetId":2,
         "Nickname":"2007 Ninja ZX6R",
         "PictureFileName":"jvmlfdaq.rkr2.jpg",
         "AverageMpg":43.90925,
         "MaxMpg":47.945
      },
      {
         "FleetId":44,
         "Nickname":"Luminous Neptune",
         "PictureFileName":"ochufm0c.ohm2.png",
         "AverageMpg":29.4285,
         "MaxMpg":30.341
      }
   ]
}

(Note – useful JSON formatter here http://jsonformatter.curiousconcept.com/)

I can interpret this as an object with a property ‘FleetsCollection’ which is a list of objects which have further properties. In fact, if you take your JSON string data you can convert it to a c# class using this online tool http://json2csharp.com/

For our example, the online tool generates,

public class FleetsCollection
{
    public int FleetId { get; set; }
    public string Nickname { get; set; }
    public string PictureFileName { get; set; }
    public double AverageMpg { get; set; }
    public double MaxMpg { get; set; }
}

public class RootObject
{
    public List<FleetsCollection> FleetsCollection { get; set; }
}

Then, we can read the data in using the following code:

var dataContractJsonSerializer = new DataContractJsonSerializer(typeof(RootObject));
RootObject readObject = (RootObject)dataContractJsonSerializer.ReadObject(memoryStream);

Tagged , , ,

1 thought on “wp7–JSON parsing

Leave a Reply

Your email address will not be published. Required fields are marked *