ASP.NET JavaScriptSerializer需要HttpResponse吗?

似乎System.Web.Script.Serialization.JavascriptSerializer类尝试获取当前请求的HttpResponse,可能是为了应用适当的字符编码。

但是,这意味着当您要在范围内使用没有HttpContext的类时,它会出现以下exception+堆栈跟踪:

[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存在的方式重做代码。 有关如何避免这种情况的任何想法? 可以为String类型定制JavascriptConverter是一个强大的解决方案吗?

谢谢

帕斯卡尔

AFAIK JavaScriptSerializer不需要任何HttpContext,并且在控制台应用程序中完美运行:

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

你也可以试试Json.NET 。