Thursday, August 9, 2012

Deserialize ESRI Geocode JSON Response to your Class using  DataContractJsonSerializer.



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Runtime.Serialization;
using System.ServiceModel.Web;
using System.Runtime.Serialization.Json;
using System.IO;

namespace SynchronusTest
{
    class serializerClass
    {

        public geocoder FromJSON(string jsonResponse)
        {
            geocoder what = new geocoder();
            what = Deserialize( jsonResponse); 
            return what;
        }

        private static T Deserialize(string json)
        {
            var instance = Activator.CreateInstance();
            using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
            {
                var serializer = new DataContractJsonSerializer(instance.GetType());
                return (T)serializer.ReadObject(ms);
            }
        }
    }

    [DataContract]
    public class geocoder
    {
        [DataMember(Name = "spatialReference")]
        public spatialReference spatialReference { get; protected set; }

        [DataMember(Name = "candidates")]
        public List candidates { get; protected set; }
    }

    [DataContract]
    public class Whatever
    {
        [DataMember(Name = "address")]
        public string address { get; protected set; }

        [DataMember(Name = "score")]
        public string score { get; protected set; }

        [DataMember(Name = "attributes")]
        public string attributes { get; protected set; }

        [DataMember(Name = "location")]
        public location location { get; protected set; }

    }
    [DataContract]
    public class spatialReference
    {
        [DataMember(Name = "wkid")]
        public int wkid { get; protected set; }
    }

    [DataContract]
    public class location
    {
        [DataMember(Name = "x")]
        public double x { get; protected set; }

        [DataMember(Name = "y")]
        public double y { get; protected set; }
    }
}




Usage


SynchronusTest.serializerClass deserializerTest = new SynchronusTest.serializerClass();
string Json = @"{""spatialReference"" : {""wkid"" : 4326},""candidates"" : [{""address"" : ""Rochester, Ab"",""location"" : {""x"" : -113.46582113964837,""y"" : 54.36887554118249},""score"" : 68,""attributes"" : { }}]}";
deserializerTest. FromJSON (Json);