2012-02-06 97 views
0

我用下面的代碼來獲得JSON數據:JSON返回的數據在格式化

[AcceptVerbs(HttpVerbs.Get)] 
    public JsonResult getBranchViaJson() 
    { 
     Json(getBranchList(AppSession.BranchID.Value)); 
    } 


    private object getBranchList(int n) 
    { 

     var mybranchList = from p in getBranchs(n) 
       select new { p.Code, p.Name }; 
     return mybranchList.ToArray(); 
    } 

客戶端保留值: [{"Code":000,"Name":"Milan"}, {"Code":001,"Name":"Istanbul"}, {"Code":002,"Name":"Baku"},]

但我想是這樣的:

[{000:"Milan"},{001:"Istanbul"},{002:"Baku"}] 

這樣做的最好方法是什麼?

+0

我想papulate在編輯模式 – loviji 2012-02-06 14:05:36

+0

jQeury DataTable的選擇列表那麼,什麼是** **特定你遇到了這個問題迫使你張貼在SO這個問題?你有沒有使用數組的麻煩? json API令人困惑嗎?它是什麼? – 2012-02-06 14:07:50

回答

2

首先第一件事情:

[{000:"Milan"},{001:"Istanbul"},{002:"Baku"}] 

是無效的JSON。屬性必須加引號,像這樣:

[{"000":"Milan"},{"001":"Istanbul"},{"002":"Baku"}] 

爲了達到這個輸出,你可以使用一個Dictionary<string, string>JavaScriptSerializer將序列化到所需的輸出。所以,簡單地調用ToDictionary擴展方法對你的模型,以便將其轉換爲一個字典:

就像是:

[AcceptVerbs(HttpVerbs.Get)] 
public JsonResult getBranchViaJson() 
{ 
    var branches = 
     from p in getBranchs(AppSession.BranchID.Value) 
     select new { p.Code, p.Name }; 
    var model = branches.ToDictionary(x => x.Code, x => x.Name); 
    return Json(new[] { model }, JsonRequestBehavior.AllowGet); 
} 

,或者如果你想保持你返回一個對象私有方法,你可以把它返回詞典:

[AcceptVerbs(HttpVerbs.Get)] 
public JsonResult getBranchViaJson() 
{ 
    return Json(getBranchList(AppSession.BranchID.Value), JsonRequestBehavior.AllowGet); 
} 

private object getBranchList(int n) 
{ 
    var mybranchList = from p in getBranchs(n) 
      select new { p.Code, p.Name }; 
    return new[] { mybranchList.ToDictionary(x => x.Code, x => x.Name) }; 
} 

請注意,我用new[] { model }。這是因爲否則JavaScriptSerializer將不會根據需要生成一個javascript數組,而是一個簡單的JavaScript對象。

備註:請注意,我已添加JsonRequestBehavior.AllowGet,以便該控制器操作可以與GET請求一起使用,該請求在返回JSON響應的操作中被默認禁用。

+0

downvote的任何原因? downvoting時請留言。 – 2012-02-06 14:18:41

+0

+1,很好的答案。爲什麼downvote? – dillenmeister 2012-02-06 14:26:31

+0

我的輸出如下:[{「000」:「Milan」,「001」:「Istanbul」,「002」:「Baku」}]這對我很有幫助。謝謝。 – loviji 2012-02-06 14:43:51