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:
JSON,
WCF,
CodeProject-Tip