2011-03-14 9 views
15

¿Cómo le gustaría una clase que devolverá un formato json.¿Cómo puede mi clase Asp.Net C# devolver un formato json

Este método funciona bien en el controlador pero cuando quiero poner en una clase, el objeto Json no parece existir.

public JsonResult Test() 
{ 
     //Error 1 The name 'Json' does not exist in the current context C:\inetpub\wwwroot\mvcinfosite\mvcinfosite\Validation\ValidationClass\BaseValidator.cs 66 20 mvcinfosite 
     return Json(new { errMsg = "test" }); 
} 

Quiero poner ese código en una clase simple. Quiero poder llamar a este método en muchos controladores.

Gracias.

EDITAR
Esta es mi clase de (donde el código de trabajo dosen't)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using mvcinfosite.Models; 
using mvcinfosite.Base; 
using System.Web.Mvc; 

public class BaseValidator 
{ 
    public JsonResult Test() 
    { 
     return Json(new { errMsg = "test" }); 
    } 
} 
+1

¿Tiene usted la declaración 'using' adecuada en su clase? –

+0

Por lo general, es más fácil entender lo que sucede si publica un código ** que no funciona ** en lugar del que funciona bien. – Snowbear

Respuesta

20

Json() es un método en el controlador base que devuelve un JsonResult. Necesita hacer la serialización usted mismo.

return new JavaScriptSerializer().Serialize(new { errMsg = "test" }); 

Usted tendrá que incluir using System.Web.Script.Serialization.

+0

Thx Ryan, realmente lo aprecio. –

+0

@ Jean-Francois Dijiste que necesitas hacer esto en muchos controladores ¿no necesitas un ActionResult en lugar de un String? Solo una aclaración. – jbtule

+0

Veo lo que está preguntando ahora. Sí, sería mejor simplemente devolver un JsonResult, pero no estoy 100% seguro de cómo funcionan los validadores en MVC ya que no los he usado antes. – Ryan

16

return Json(new { errMsg = "test"});

es un método de conveniencia en el controlador que es equivalente a

return new JsonResult(){ 
     Data = new { errMsg = "test"}, 
     JsonRequestBehavior = JsonRequestBehavior.DenyGet 
}; 
+0

Thx jbtule, su solución también funciona muy bien ... Solo puedo poner una como respuesta. Pero tu trabajo es perfecto. Thx otra vez :) –

+1

@ Jean-Francois está bien, es solo que ambas respuestas arrojan resultados muy diferentes, @ la respuesta de Ryan devuelve una cadena, que no es ideal si solo vas a devolverla como resultado de un método de acción, pero más idea si necesitas hacer algo que no esté relacionado con el patrón MVC. – jbtule

0

Para mí esto funcionó (la mente el cambio del tipo de retorno al objeto):

public Object Test() 
{ 
     return new { errMsg = "test" }; 
} 
Cuestiones relacionadas