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]);
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.