2011-03-14 28 views
15

如何才能返回一個json格式的類。我的Asp.Net C#類如何返回一個json格式

此方法在控制器 中很好用,但是當我想放入一個類時,Json對象似乎不存在。

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" }); 
} 

我想把這段代碼放在一個簡單的類中。我希望能夠在許多控制器中調用此方法。

謝謝。

EDIT
這是我的類(在碼這麼想的工作)

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

你有你們班正確'using'聲明? – 2011-03-14 15:41:01

+0

如果你發佈一個**不工作的**代碼,而不是工作正常的代碼,通常會更容易理解發生了什麼。 – Snowbear 2011-03-14 15:42:27

回答

20

Json()是基本控制器上的一個方法,它返回一個JsonResult。你需要自己做序列化。

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

您將需要包括using System.Web.Script.Serialization

+0

Thx Ryan,我真的很感激。 – 2011-03-14 19:02:18

+0

@ Jean-Francois你說你需要在許多控制器中做到這一點,你不需要一個ActionResult而不是一個String?只是澄清。 – jbtule 2011-03-14 19:06:52

+0

我明白他現在在問什麼。是的,只是返回一個JsonResult會更好,但我不能100%確定驗證器是如何在MVC中工作的,因爲我之前沒有使用它們。 – Ryan 2011-03-15 00:37:48

16

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

是控制器上一個方便的方法,它等效於

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

Thx jbtule,您的解決方案工作得很好......我只能將其中一個作爲答案。但你的工作是完美的。 Thx再次:) – 2011-03-14 19:07:46

+1

@ Jean-Francois這很好,只是這兩個答案都返回了非常不同的結果,@ Ryan的答案返回一個字符串,如果你只是將它作爲一個操作方法的結果返回,這並不理想,但如果你需要做一些與MVC模式無關的事情,那麼更多的想法。 – jbtule 2011-03-14 19:12:21

0

對我來說,這個工作(介意對象的返回類型的變化):

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