2011-12-30 3 views
0

У меня есть эта модель :Как изменить способ asp.net mvc форматирования JSON?

public class Person 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public List<Color> Colors { get; set; } 
} 

public class Color 
{ 
    public int ColorId { get; set; } 
    public string Name { get; set; } 
} 

и asp.net MVC-х return Json(...) дает мне это:

[{"Name":"JC","Age":24,"Colors":[{"ColorId":1,"Name":"Red"},{"ColorId":2,"Name":"Blue"}]}, 
{"Name":"Albert","Age":29,"Colors":[{"ColorId":2,"Name":"Blue"}]}] 

когда я пытаюсь вернуть тип: List<Person>

но я хотеть что-то подобное (если возможно):

{"People":[{"Name":"JC","Age":24,"Colors":[{"ColorId":1,"Name":"Red"},{"ColorId":2,"Name":"Blue"}]},{"Name":"Albert","Age":83,"Colors":[{"ColorId":2,"Name":"Blue"}]}]} 

МОЙ ВОПРОС (S):

  • Как я могу сделать C# (asp.net MVC) возвращение JSON с лучшим форматом что-то вроде: (примечание: игнорировать данные, мой Главное, чтобы он вернулся с «Люди» в качестве основной коллекции. Как мне это сделать? JSON.net?)

    {"Люди": [{"Имя": "JC", "Возраст": 24, "Цвета": [{"ColorId": 1, "Name": "Red" }, {«ColorId»: 2, «Name»: «Blue»}]}, {«Имя»: «Альберт», «Возраст»: 83, «Цвета»: [{«ColorId»: 2, «Name ":" Синий "}]}]}

  • ИЛИ как я могу сделать KNOCKOUT.JS КАРТ PLUGIN работы с этим типом формата JSON? (для тех, кто знает нокаут)

    [{"Имя": "JC", "Возраст": 24, "Цвета": [{"ColorId": 1, "Name": "Red"}, { «ColorId»: 2, «Name»: «Blue»}]}, {«Имя»: «Альберт», «Возраст»: 29, «Цвета»: [{«ColorId»: 2, «Name»: Blue "}]}]


UPDATE (дополнительные разъяснения/Информация):

это мои данные, и я хочу, чтобы вернуть список

private List<Person> _people = new List<Person> 
             { 
              new Person 
               { 
                Name = "JC", 
                Age = 24, 
                Colors = new List<Color> 
                   { 
                    Red, 
                    Blue, 
                   } 
               }, 
              new Person 
               { 
                Name = "Albert", 
                Age = 29, 
                Colors = new List<Color> 
                   { 
                    Blue 
                   } 
               } 
             }; 

в формате JSON, подобный следующему:

{"People":[{"Name":"JC","Age":24,"Colors":[{"ColorId":1,"Name":"Red"},{"ColorId":2,"Name":"Blue"}]}, 
{"Name":"Albert","Age":83,"Colors":[{"ColorId":2,"Name":"Blue"}]}]} 

я просто интересно, если это возможно, или если не, то как я могу сделать knockout.js отображение плагин адаптируются к способу возвращения json MVC?

ответ

3

Вам нужен контейнер, так как вы не хотите, чтобы вернуть массив, но объект с переменная People.

Нечто подобное (с использованием динамической):

var jsonData = new 
      { 
       People = _people 
      }; 
return Json(jsonData, JsonRequestBehavior.AllowGet); 

Update

JSON действительно простой формат. Давайте пропустим все, что вам не нужно сейчас.

  • Объекты: Объекты в json начинаются и заканчиваются {}. Все, что в них соответствует свойствам в C#.
  • Массивы: Возвращение IEnumerable вернет массив. Массив может содержать другие массивы, объекты или простые поля.

Код выше использует динамический объект в C# и может быть переведен в класс, глядя, как это:

public class MyCustomClass 
{ 
    public IEnumerable<Person> People {get;set;} 
} 

Следовательно, это объект возвращения массива в результате:

{ People: [] } 

Где {} соответствует MyCustomClass.

+0

ничего себе. Я потратил часы, пытаясь понять это ... решенный небольшим фрагментом кода от одного умного парня. большое спасибо. Помните, если бы вы могли рассказать мне больше информации/объяснений того, что вы там делали? может быть, ссылка на некоторые ресурсы, ключевые слова или вы могли бы рассказать мне? Я довольно новичок в C# и JSON .. –

+0

http://www.asp.net/mvc/tutorials это хорошо. Там есть JSON и другие интересные вещи. –

+0

@JanCarloViray: Небольшое обновление – jgauffin

1

вы можете вернуть вещи, в, например, таким образом:

var jsonData = new 
      { 
       Name = qry.Name, 
       Age = qry.Age, 
       Colors = (
        from c in qry 
        select new 
        { 
         ColorID = c.ColorID, 
         Name = c.Name 
        }).ToArray() 
      }; 

return Json(jsonData, JsonRequestBehavior.AllowGet); 

Может быть что-то подобное :)

+0

Если вы могли бы перевести это на мои модели? я немного смущен этим и как это изменит мой json-формат. спасибо –

+0

Было какое-то с завязанными глазами кодирование, вам, возможно, потребуется изменить что-то, чтобы оно работало как ожидалось :) и fromc получить данные и поместить их в «var qry = ..» –

+0

Я просто новичок в C# и json, но Я не думаю, что ваш код возвращает тип List (?) ... Я обновил свой вопрос для некоторых образцов данных C#. возможно, это может добавить некоторые разъяснения. В очередной раз благодарим за помощь. –

Смежные вопросы