ASP.NET ScriptService-Deserialisierungsproblem mit abgeleiteten Typen

Ich habe einScriptService web-Methode (.NET 3.5), die einen einzelnen Parameter eines abstrakten Basistyps verwendet:

[WebMethod(EnableSession=true)]
[ScriptMethod()]
public bool Test(Item item) { ... }

Und

namespace Namespace {
public abstract class Item
{
    public int id;
}

public class Group : Item
{
    public Item[] items;
}

public class Instance : Item
{
    public string whatever;
}
}

Normalerweise, wenn die Methode aufgerufen wird,item wird ein ... seinGroup was beinhaltetInstance und / oderGroup Objekte. Ich rufe diesen Service von jQuery aus an. Ich verwende nicht das clientseitige Microsoft-Framework. Aufrufe anderer Methoden funktionieren einwandfrei.

Das Problem Wenn ich aufrufe, wird eine Ausnahme ausgelöst, bevor meine Methode überhaupt aufgerufen wird. Zum Beispiel, wenn mein Anruf lautet:

POST /WebService.asmx/Test HTTP/1.1
Content-Type: application/json; charset=UTF-8
Accept: application/json, text/javascript, */*

{"item":{"id":0,"__type":"Namespace.Group","items":[]}}

... ich bekomme einInvalidOperationException:

{"Message":"Operation is not valid due to the current state of the object.","StackTrace":"   at System.Web.Script.Serialization.ObjectConverter.ConvertDictionaryToObject(IDictionary`2 dictionary, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)\r\n   at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)\r\n   at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}

Wenn ich das @ fallen las__type Mitglied des JSON-Objekts oder ändern Sie es inNamespace.Item (und entferne dasabstract Modifikator vonItem), die Ausnahme verschwindet, aber das resultierende deserialisierte Objekt ist offensichtlich irgendwie nutzlos.

Was vermisse ich