2012-02-06 139 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