Salient Solutions

wrasslin ones and nones for fun and profit - Sky Sanders' Blog
posts - 96, comments - 70, trackbacks - 0

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

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.


Technorati tags:

Print | posted on Tuesday, January 12, 2010 3:04 AM | Filed Under [ CodeProject-Tip ]

Feedback

No comments posted yet.

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 3 and 7 and type the answer here:

Powered by: