Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / web / HTML

Strongly typed deserialization of ASP.NET 3.5 ScriptService JSON in Managed code. e.g. {d:{__type:

0.00/5 (No votes)
14 Apr 2010CPOL 1  
NOTE: This article presents another solution that does not depend on JSON.net.Doing interop with an ASP.NET ScriptService in JavaScript is simple, just deserialize the payload, e.g. result.d.But if you are consuming with managed code it gets a bit tricky.The 3.5 stack wraps the payload in...

NOTE: This article presents another solution that does not depend on JSON.net.


Doing interop with an ASP.NET ScriptService in JavaScript is simple, just deserialize the payload, e.g. result.d.


But if you are consuming with managed code it gets a bit tricky.


The 3.5 stack wraps the payload in a 'd' container making deserialization to a similarly shaped type or a type in a shared library (if you are using a shared library, why use JSON? There are reasons... ;-p) impossible using any of the ms serializers.


My solution is to use Newtonsoft's JSON.NET with a simple generic helper class to unwrap the payload..


public class AjaxWrapper<T>
{
    public T d;   
}

and then deserialize with JSON.NET....
var response = HttpRequestHelper.AjaxApp([get some json from an asp.net 3.5 scriptservice]);

// response = "{"d":{"__type":"MyNamespace.MyType","Assertions":0,....."

AjaxWrapper<MyNamespace.MyType> result = Newtonsoft.Json.JsonConvert.DeserializeObject<AjaxWrapper<MyNamespace.MyType>>(response);

Easy.....


In the example, the typenames are the same for clarity but the type specified in the json is ignored by JSON.NET.


As long as the client-side type is similarly shaped you are golden.


Note: this applies to web services, not webhttp wcf services as there are attributes to get them to server POJO JSON that can be directly consumed.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)