JSON вернул форматирование данных - PullRequest
0 голосов
/ 06 февраля 2012

Я использую приведенный ниже код для получения данных 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"}]

Каков наилучший способ сделать это?

1 Ответ

2 голосов
/ 06 февраля 2012

Перво-наперво:

[{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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...