ASP.NET JavaScriptSerializer требует HttpResponse? - PullRequest
3 голосов
/ 07 октября 2010

Похоже, что класс System.Web.Script.Serialization.JavascriptSerializer пытается получить HttpResponse для текущего запроса, предположительно для применения соответствующей кодировки символов.

Однако это означает, что когда вы используете класс без HttpContext в области видимости, он взрывается со следующим исключением + трассировка стека:

[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

Я не могу переработать код в такойспособ гарантировать существование действительного HttpContext.Есть идеи, как этого избежать?Может ли пользовательский JavascriptConverter для типа String быть надежным решением?

Спасибо

Pascal

1 Ответ

4 голосов
/ 07 октября 2010

AFAIK JavaScriptSerializer не требует никакого HttpContext и отлично работает в консольном приложении:

class Program
{
    static void Main(string[] args)
    {
        string json = new JavaScriptSerializer().Serialize(new { Bar = "foo" });
        Console.WriteLine(json);
    }
}

Вы также можете попробовать Json.NET .

...