2012-03-28 18 views
6

Tengo un servicio web que contiene un método:ASMX servicio web - retorno JSON en lugar de XML

[WebMethod] 
public string Movies() 
{ 
    using (var dataContext = new MovieCollectionDataContext()) 
    { 
     var query = dataContext.Movies.Select(m =>new{m.Title,m.ReleaseDate}).Take(20); 
     var serializer = new JavaScriptSerializer(); 
     return serializer.Serialize(query); 
    } 
} 

El método serializa adecuadamente el objeto, pero cuando veo la respuesta en FireBug, que se ve así:

<?xml version="1.0" encoding="utf-8"?> 
<string xmlns="http://tempuri.org/">[{"Title":"SQL","ReleaseDate":"\/Date(1224007200000)\/"},{"Title":"Termonator Salvation","ReleaseDate":"\/Date(1224007200000)\/"}]</string> 

Aquí es el método jQuery en el que yo uso Fuente

$(function() { 
    alert("Welcome To Kendo"); 
    var dataSource = new kendo.data.DataSource(
       { 
        transport: { 
         read: { 
          type: "POST", 
          dataType: "json", 
          url: "/MovieService.asmx/Movies" 
          // contentType: "application/json; charset=utf-8" 

         } 
        }, 
        change: function (e) { 
         alert(e); 

        }, 
        error: function (e) { 
         alert(e[2]); 
        }, 
        pageSize: 10, 
        schema: { 
         data: "d" 

        } 


       }); 

    $("#MovieGridView").kendoGrid({ 
     dataSource: dataSource, 
     height: 250, 
     scrollable: true, 
     sortable: true, 
     pageable: true, 
     columns: [ 
      { field: "Title", title: "Movie Name" }, 
      { field: "ReleaseDate", title: "Movie Release" } 
      ], 
     editable: "popup", 
     toolbar: ["create"] 
    }); 
}); 

El código s de datos de Kendo cómo lo que estoy haciendo en jQuery y cuando la llamada evento de error que se produjo el error

SyntaxError: JSON.parse: unexpected character 

¿Cómo puedo convertir los datos anteriores en JSON para que pueda utilizarlo en jQuery? ¿Y dónde me estoy equivocando?

+0

¿Por qué utiliza JSONP aquí? No tiene sentido. – Joe

+0

ok quito jsonp pero el problema sigue siendo el mismo por resolverlo –

+0

encontré otra forma de hacerlo usando WCF y JSONP es una combinación genial y funciona perfectamente –

Respuesta

8

es necesario especificar el ResponseFormat del método:

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string GetMovies() { 
} 

Nota: Por el bien de otros que llegan a esta pregunta con problemas similares, también es importante tener en cuenta que usted debe estar usando POST solicitudes, no GET solicitudes. Ver: JSON Hijacking and How ASP.NET AJAX 1.0 Avoids these Attacks


EDITAR

Sobre la base de la jQuery que usted envió, usted no está llamando el método correcto. Usted C# define un método llamado GetMovies, pero su jQuery está intentando llamar a un método llamado `Movies '.

Este:

url: "/MovieService.asmx/Movies" 

debe cambiar a esto:

url: "/MovieService.asmx/GetMovies" 
+0

Y no use un GET – Joe

+0

nada pasa el mismo problema querido –

+1

@HaseebKhan, antes que nada, no me llames cariño :-). En segundo lugar, esta es la forma correcta de devolver datos formateados JSON. Revise mi respuesta y confirme que la ha implementado correctamente en su entorno de prueba. –

Cuestiones relacionadas