NOTE: This article presents another solution that does not depend on JSON.net.
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);
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.