2012-06-03 38 views
0

返回多個對象通過內置JSON轉換器我在行動返回多個對象是這樣的:使用Json.Net

return Json(new { success = true, data = units }); 

當我使用JSON.NET庫我該怎麼做?

但這顯然不是編譯:

return new { success = true, data = JsonConvert.SerializeObject(units) }; 

我不想爲它創建一個包含兩個屬性的額外視圖模型。

我對默認的Json JavaScript序列化程序可能有錯誤的理解嗎?

回答

0

如果你想使用Newtonsoft.Json爲了序列化你的對象,你可以創建一個新的ActionResult類並傳遞結果中的數據。

例如:

public class NewtonsoftJsonResult : ContentResult 
{ 
    private readonly object _data; 

    public NewtonsoftJsonResult(object data) 
    { 
     _data = data; 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     Content = JsonConvert.SerializeObject(_data); 
     ContentType = "application/json"; 

     base.ExecuteResult(context); 
    } 
} 

剛剛與匿名對象返回您的自定義的ActionResult數據:

public ActionResult Index() 
{ 
    return new NewtonsoftJsonResult(new { success = true, data = units}); 
} 
+0

謝謝。這工作得很好。 – Elisabeth

0

在第二個示例中,JsonConvert.SerializeObject(units)將導致返回到JavaScript的字符串。 JavaScript不會將data看作包含一些「真實」數據,而只是一個簡單的字符串,裏面帶有括號括號。

像往常一樣使用你的第一句話。 MVC的Json方法將序列化其中的對象。

例如:

class Units 
{ 
    public int Width { get; set; } 
    public int Height { get; set; } 
} 

...

Units u = new Units { Width = 34, Height = 20 }; 

return Json(new { success = true, data = units }); 

將導致一個JSON看起來與此類似:

{ "success" : "true", "data" : { "Height" : "20", "Width" : "34" } } } 
+0

我不希望使用內置JSON序列。我的問題是關於Json.net和通過在JavaScript中的方式我這樣做:var jsonData = $ .parseJSON(data);從而返回一個JSON字符串是好的。 – Elisabeth