2012-02-08 58 views
1

嗨,我打我的头靠在这里的墙壁......ASP.NET 4.0从WebService的JSON - 删除逃生斜线

我使用DataContractJsonSerializer编码我是从数据库中检索数据,我“M发送回一个AJAX调用...

我有这样的扩展:

public static string ToJSON<T>(this T obj) where T : class 
    { 
     DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T)); 
     using (MemoryStream stream = new MemoryStream()) 
     { 
      serializer.WriteObject(stream, obj); 
      return Encoding.Default.GetString(stream.ToArray()); 
     } 
    } 

,我从ASMX调用它:

return _webServiceService.GetSponsors().ToJSON(); 

使用实体框架

它的所有工作还挺工作,除了这个存储过程在结果传球被退回什么部分:

{"d":"[{\"FileID\":296,\"IconUrl\":\"\\/Files\\/Banners\\/20119\\/00B56BAC.jpg\",\"ImageUrl\":.... 

如何在地球上,我摆脱了斜线,这样它返回以下内容:

{"d":"[{"FileID":296,"IconUrl":"/Files/Banners/20119/00B56BAC.jpg","ImageUrl":.... 

我想实现JQuery UI自动完成。那么我猜这会排序它,不知道我是否需要引号内的FileID值?

+0

这是一个MVC应用程序吗? – tawman 2012-02-08 17:48:20

+0

不,这是MVP ...我会张贴一些代码 – Ianc22 2012-02-08 17:51:26

回答

1

您不需要手动将JSON序列化返回值,因为ASP.NET will handle it for you automatically in that scenario。您看到的是ASP.NET将第二级JSON序列化应用于手动生成的字符串,该字符串需要用反斜杠转义双引号。

更改ASMX方法返回类似List<Sponsor>的内容,并直接返回_webServiceService.GetSponsors(),不带ToJSON()扩展名。

+0

谢谢戴夫......!我现在觉得自己很蠢......分类! – Ianc22 2012-02-08 18:38:48

+0

@ Ianc22:你不应该感觉不好。这是一个非常常见的错误。毫无疑问,ASP.NET会在这里为你处理JSON工作,所以假设你需要自己做这件事是很自然的。 – 2012-02-08 18:44:25