Effortless getting data out of a JSON REST response
One of the pains with using REST is getting the data from JSON into something usable. There is a very simple solution: Take the JSON, pass it to a magic black box and get a dataset back that has foreign keys and other joys. That sounds very nice --
To put this into a fuller context, consider the code below that does a get to any REST JSON url and returns a dataset
- Make the JSON REST call and then
- Query or filter data tables to do future processing. No need to define classes to deserialize the JSON into.....
The code is horrible and shown below...
using System; using System.Linq; using System.Data; using System.Xml; using Newtonsoft.Json; namespace Avalara.AvaTax.JsonUtilities { public static class Utility { public static DataSet ConvertJsonToDataSet(string jsonText, string rootElementName) { var xd1 = new XmlDocument(); xd1 =JsonConvert.DeserializeXmlNode( jsonText,rootElementName); var result = new DataSet(); result.ReadXml(new XmlNodeReader(xd1)); return result; } } }
To put this into a fuller context, consider the code below that does a get to any REST JSON url and returns a dataset
public static DataSet GetDataSet(string url, string rootName = "myroot") { var webRequest = (HttpWebRequest)WebRequest.Create(url); webRequest.Method = "GET"; webRequest.ContentType = "application/json, *.*"; webRequest.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:28.0) Gecko/20100101 Firefox/28.0"; webRequest.Headers.Add("AUTHORIZATION", Authorization); var webResponse = (HttpWebResponse)webRequest.GetResponse(); if (webResponse.StatusCode != HttpStatusCode.OK) Console.WriteLine("{0}", webResponse.Headers); var json = String.Empty; using (StreamReader reader = new StreamReader(webResponse.GetResponseStream())) { json = reader.ReadToEnd(); reader.Close(); } // We must name the root element return DropUnusedTables(Utility.ConvertJsonToDataSet(json, rootName)); }
No longer do you need to deserialize to hand constructed classes to consume the data.
Comments
Post a Comment