 <p>You could always create a service that returns a Stream and use the <code>JsonSerializer</code> to serialize your objects into a <code>MemoryStream</code>, and then return the <code>MemoryStream</code> from the service:</p> <pre><code>public Stream GetSomeObject(int groupId) { byte[] bytes; var serializer = new JavaScriptSerializer(); switch(groupId) { case 2: var groups = GetGroups(); // fill the groups however bytes = Encoding.UTF8.GetBytes(serializer.Serialize(groups)); break; case 3: var customers = GetCustomers(); bytes = Encoding.UTF8.GetBytes(serializer.Serialize(customers)); break; } return new MemoryStream(bytes); } </code></pre> <p>In that case, you would simply load the appropriate object into memory based on the parameters and return the appropriate strongly typed object via the <code>Stream</code>.</p> <p>This is the same approach I've used in the past to return Json results from a WCF Service without the type information (the approach was suggested by a member Microsoft's WCF team, so I figured it was fairly reliable).</p>