In my previous post, I have explained how to pass complex types using jQuery and JayRock in .NET 2.0 framework. I was digging a bit into Dave’s example (using complex types to make calling services less complex) in .NET 3.5 framework, to find how easier JSON serilaization/deserialization can be made.
When a Web service class is decorated with “ScriptService” attribute, which is in the System.Web.Script.Services namespace in .NET 3.5, the web service returns data in JSON format [MSDN]. Whether the returned value is a string or an object, it will be in JSON format. So no need of writing chunks of code for serializing objects explicitly.
Therefore, all that we need to do is to simply decorate our web service class with “ScriptService” attribute and return an object from the server. So, to create a JSON object like this:
{"d":{"FirstName":"Krishna","LastName":"Chaitanya","City":"Hyd","State"
:"Andhra","Country":"India"}}
We can simply return a person object like this:
<WebMethod()> _
Public Function fnFetchDetailsClass() As Person
Dim objPerson As New Person
Try
objPerson.FirstName = "Krishna"
objPerson.LastName = "Chaitanya"
objPerson.City = "Hyd"
objPerson.State = "Andhra"
objPerson.Country = "India"
Catch ex As Exception
End Try
Return objPerson
End Function
In some situations (like in client side templating), we might need to create custom, complex JSON objects on the fly. In such situations, we can make use of .NET’s “ListDictionary” and “ArrayList” classes.
The above example can be re-written using ListDictionary as:
<WebMethod()> _
Public Function fnFetchDetails() As ListDictionary
Dim jsonObj As New ListDictionary
Try
jsonObj.Item("fname") = "Krishna"
jsonObj.Item("lname") = "Chaitanya"
jsonObj.Item("city") = "Hyd"
jsonObj.Item("state") = "Andhra"
jsonObj.Item("country") = "India"
Return jsonObj
Catch ex As Exception
jsonObj.Item("Error") = "Error at server"
Return jsonObj
End Try
End Function
Thus, using JSON is made easier in .NET 3.5.
Here is a simple demo which makes things clear. (I have used jQuery for making AJAX calls.)
(Note: ListDictionary stores values in Name/Value pairs, which is useful in building JSON Object. Similarly, an ArrayList can be used to build JSON Arrays. Therefore, these two can be used instead of JsonObject and JsonArray classes of Jayrock in my post Converting ASP.NET DataTable to JSON using JayRock.)