Streamlining the JSON Serialization

by James 11/1/2007 3:26:00 AM

For a while now I have been using the Newtwonsoft.Json dll to generate my JSON objects. The documentation is pretty sparse and I had to do a lot of experimentation to figure out the best way to do it. I ended up with this base code.

myUCR_DepartmentsTableAdapters.MyUCR_DepartmentsTableAdapter deptTA = new myUCR_DepartmentsTableAdapters.MyUCR_DepartmentsTableAdapter();
myUCR_Departments.MyUCR_DepartmentsDataTable deptDT = new myUCR_Departments.MyUCR_DepartmentsDataTable();
deptTA.FillDepts(deptDT);
StringWriter sw = new StringWriter();
JsonWriter writer = new JsonWriter(sw);
writer.WriteStartArray();

foreach (myUCR_Departments.MyUCR_DepartmentsRow deptRow in deptDT)
{
   writer.WriteStartObject();
   writer.WritePropertyName("deptID"); writer.WriteValue(deptRow.deptID.ToString());
   writer.WritePropertyName("dept"); writer.WriteValue(deptRow.department.ToString().Trim());
   writer.WriteEndObject();           
}
writer.WriteEndArray();
writer.Flush();
Response.Write(sw.GetStringBuilder().ToString());

 As you can see, that's a lot of code to serialize a simple datatable.

I wanted to find an easier way, so started browsing around. Googling for "JSON DataTable Serialization", I came across this article "A DataTable Serializer for ASP.NET AJAX" at denydotnet.com. What he did was to extend the JavaScriptConverter found in System.Web.Script.Serialization to serialize a DataTable. I looked through his code and decided to implement it.

Now here's how I do my serialization:

        MyUCR_LoginTableAdapter ta = new MyUCR_LoginTableAdapter();
        DataTable dt = ta.GetByTesting();
        JavaScriptSerializer toJSON = new JavaScriptSerializer();
        toJSON.RegisterConverters(new JavaScriptConverter[]{new JavaScriptDataTableConverter()});
        Response.Write(toJSON.Serialize(dt));

And what rocks is the object names are mapped to the column names in the database.

Cool

James

 

Related posts

Comments

5/27/2008 9:46:10 PM

Hi James,

Could you please let me know how can we use the returned data from the maethod in the javascript code.What is the best way to populate them into a HTML table.

Regards,
Kishore.

Kishore in

5/28/2008 1:07:05 AM

Hi Kishore,
The data returned is in JSON format, so I have a function which converts the JSON formatted string to an Array.

function returnJson(rText)
{
if(rText.indexOf(chk) > -1){rText = rText.substring(chk.length, rText.length);}
var func = new Function("return " + rText);
var jsonObj = func();
return jsonObj;
}

After that it's just a matter of looping through the elements of the array and processing them. For instance:

var myString = jsonObj[i]["myString"];
Creating a table isn't difficult, just loop through the array, creating a row for each iteration, and a cell for each value in the that row.

Take a look at my "Home Grown Ajax presentation". And check out json.org for more information on the JSON format.

Thanks for the comment,
James

James Johnson us

Add comment


 

  Country flag





Live preview

8/21/2008 4:11:51 AM