【问题标题】:JSON returned data formattingJSON 返回数据格式
【发布时间】:2012-02-06 13:56:17
【问题描述】:

我正在使用下面的代码来获取 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"}]

最好的方法是什么?

【问题讨论】:

  • 我正在尝试在可编辑模式下填充 jQeury DataTable 的选择列表
  • 那么您遇到的具体问题是什么,迫使您在 SO 上发布此问题?您在使用数组时遇到问题吗? json API 是否令人困惑?这是什么?

标签: asp.net asp.net-mvc json


【解决方案1】:

第一件事:

[{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 响应的操作是禁用的。

【讨论】:

  • 投反对票有什么理由吗?请在投票时发表评论。
  • 我的输出如下:[{"000":"Milan","001":"Istanbul","002":"Baku"}] 这对我很有帮助。谢谢。
猜你喜欢
  • 2011-06-11
  • 2017-02-24
  • 1970-01-01
  • 2018-04-22
  • 2021-10-08
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 2019-08-11
相关资源
最近更新 更多