формат результата asp.net mvc json - PullRequest
1 голос
/ 29 марта 2010
public class JsonCategoriesDisplay
    {
        public JsonCategoriesDisplay() { }

        public int CategoryID { set; get; }
        public string CategoryTitle { set; get; }
    }

    public class ArticleCategoryRepository
    {
        private DB db = new DB();  

        public IQueryable<JsonCategoriesDisplay> JsonFindAllCategories()
        {
            var result = from c in db.ArticleCategories                         
                         select new JsonCategoriesDisplay
                         {
                             CategoryID = c.CategoryID,
                             CategoryTitle = c.Title                            
                         };

            return result;
        }

          ....
    }

public class ArticleController : Controller
    {
        ArticleRepository articleRepository = new ArticleRepository();
        ArticleCategoryRepository articleCategoryRepository = new ArticleCategoryRepository();


        public string Categories()
        {
            var jsonCats = articleCategoryRepository.JsonFindAllCategories().ToList();

            //return Json(jsonCats, JsonRequestBehavior.AllowGet);

            return new JavaScriptSerializer().Serialize(new { jsonCats});
        }

    }

Это приводит к следующему:

{"jsonCats":[{"CategoryID":2,"CategoryTitle":"Politika"},{"CategoryID":3,"CategoryTitle":"Informatika"},{"CategoryID":4,"CategoryTitle":"Nova
kategorija"},{"CategoryID":5,"CategoryTitle":"Testna
kategorija"}]}

Если я использую закомментированную строку и помещаю JsonResult вместо возвращаемой строки, я получаю следующий результат: <</p>

[{"CategoryID":2,"CategoryTitle":"Politika"},{"CategoryID":3,"CategoryTitle":"Informatika"},{"CategoryID":4,"CategoryTitle":"Nova
kategorija"},{"CategoryID":5,"CategoryTitle":"Testna
kategorija"}]

Но мне нужно отформатировать результат так:

{'2':'Politika','3':'Informatika','4':'Nova
kateorija','5':'Testna kategorija'}

Есть ли простой способ сделать это или мне нужно будет жестко закодировать результат?

Ответы [ 3 ]

2 голосов
/ 30 марта 2010

Ile,

вы действительно должны взглянуть на библиотеку json.net, я недавно столкнулся с подобной дилеммой с json / jquery и mvc и попробовал свою собственную версию, созданную вручную, но столкнулся со многими ограничениями в моей собственной реализации. ньютон json lib довольно прост - прост в использовании и постоянно обновляется. текущая версия фантастически работает с вложенными структурами, поэтому проблема с форматированием json не возникает.

посмотрите, вам понадобится 15 минут, чтобы разобраться.

2 голосов
/ 29 марта 2010

Взгляните на библиотеку Json.Net

Библиотека Json.NET работает с форматированием JavaScript и JSON Данные в .NET просты. Быстро читать и написать JSON с помощью JsonReader и JsonWriter или сериализуйте ваш .NET объекты с одним вызовом метода используя JsonSerializer.

Я успешно использовал его в проекте .net mvc.

1 голос
/ 30 марта 2010

Попробуйте вернуть его в виде массива. Также, если вы возвращаете JsonResult, вы можете сохранить много кода (похоже, вы пытались получить желаемое форматирование)

public class ArticleController : Controller
    {
        ArticleRepository articleRepository = new ArticleRepository();
        ArticleCategoryRepository articleCategoryRepository = new ArticleCategoryRepository();

    public JsonResult Categories()
    {
        var jsonCats = articleCategoryRepository.JsonFindAllCategories().ToArray();

        return Json(jsonCats, JsonRequestBehavior.AllowGet);
    }

}

в моем тесте я получил результат

[{"Id":1,"Name":"Cat 1"},{"Id":2,"Name":"Cat 2"}]
...