Il semble que la classe System.Web.Script.Serialization.JavascriptSerializer tente d'obtenir HttpResponse pour la requête en cours, vraisemblablement pour appliquer un codage de caractères approprié.ASP.NET JavaScriptSerializer nécessite HttpResponse?
Cependant, cela signifie que lorsque vous d'utiliser la classe sans HttpContext portée, il explose à l'exception suivante + trace de pile:
[HttpException (0x80004005): Response is not available in this context.]
System.Web.HttpContext.get_Response() +8753496
System.Web.Util.HttpEncoder.get_Current() +39
System.Web.HttpUtility.JavaScriptStringEncode(String value, Boolean addDoubleQuotes) +13
System.Web.Script.Serialization.JavaScriptSerializer.SerializeString(String input, StringBuilder sb) +31
System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) +240
System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) +1355
System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Object o, StringBuilder sb, Int32 depth, Hashtable objectsInUse, SerializationFormat serializationFormat) +194
System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj, StringBuilder output, SerializationFormat serializationFormat) +26
System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj, SerializationFormat serializationFormat) +74
System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj) +6
Je ne peux pas retravailler le code de telle manière à garantir l'existence d'un HttpContext valide. Des idées sur la façon d'éviter cela? Un JavascriptConverter personnalisé pour le type String pourrait-il être une solution robuste?
Merci
Pascal
Intéressant. Peut-être essaie-t-il de déterminer si un HttpContext est disponible, et si c'est le cas, il suppose également la disponibilité de HttpResponse? Je peux déplacer ceci à un endroit où HttpContext et HttpResponse sont disponibles si cela fonctionnera quand il n'y a aucun HttpContext que ce soit. Je vais essayer ça. – Pascal
Exactement. C'est tout. Si HttpContext.Current n'est pas nul, il suppose que HttpContext.Current.Response n'est pas nul. –
En fait, il semble que ce soit un bug. A partir du réflecteur, le code réel semble être "if (null! = Current && null! = Current.Response && ...)" où current est le contexte http actuel. Le problème est que Response getter lève une exception au lieu de retourner null. – VinayC