2014-11-06 5 views
0

Как вы превращаете список объектов в строку JSON?Список объектов Json String

Код ниже возвращает только один атрибут, Люди. Как добавить к нему несколько атрибутов? Я использую JsonConvert для изменения объекта в формате JSON. Я бы открыл другие варианты/мнения о том, как это сделать. Любая помощь будет много апробирована!

Wanted Ответ:

{"People": 
    {"Person": 
     {"FirstName":"Mike", "LastName":"Smith", "Age":"26"} 
    }, 
    {"Person": 
     {"FirstName":"Josh", "LastName":"Doe", "Age":"46"} 
    }, 
    {"Person": 
     {"FirstName":"Adam", "LastName":"Fields", "Age":"36"} 
    } 
} 

Человек Класс

public class Person 
{ 
    public string FirstName { get ;set; } 
    public string LastName { get ;set; } 
    public int Age { get ;set; }  
} 

Обработка логики

public JsonResult GetAllPeople() 
{ 
    List<Person> PersonList = new List<Person>(); 
    String responseJSON = ""; 

    foreach(string data in something){ 

     //Some code to get data 
     Person p = new Person(); 
     p.FirstName = data.FirstName ; 
     p.LastName = data.LastName 
     p.Age = data.Age; 

     responseJSON += new { Person = JsonConvert.SerializeObject(p) }; 
    } 

    return Json(new { People = JsonConvert.SerializeObject(responseJSON) }, JsonRequestBehavior.AllowGet); 

} 
+0

Точную строка, которую вы опубликовали, поскольку ваш «желаемый результат» недействителен JSON. Он имеет идентификатор свойства, за которым следуют три голых объекта. – user12864

+0

Проверьте это, он может также работать для вас тоже: http://stackoverflow.com/questions/26547890/system-collections-generic-list-from-cs-to-js-variable/26549074#26549074 –

+0

лучший подход - использовать WebAPI, тогда вы просто вернете «Список » и обработчики инфраструктуры, преобразующие его в Json (или Xml) в соответствии с запросом. –

ответ

3

Создайте список объектов.

List<Person> persons = new List<Person>(); 
persons.Add(new Person { FirstName = "John", LastName = "Doe" }); 
// etc 
return Json(persons, JsonRequestBehavior.AllowGet); 

вернется

[{"FirstName":"John", "LastName":"Doe"}, {....}, {....}] 
+1

это не создаст объект с массивом People, что является желаемым результатом. Перед его сериализацией поместите его в анонимный объект. – iceburg

+0

@iceburg, Не уверен, что именно хочет OP. Заголовок говорит _List of objects_ и _Wanted Response_ недействителен –

+0

@iceburg Вы правы, но это работает нормально. Он будет использовать индексы, а не атрибут массива «Люди». – MGot90

0

return Json() 

фактически сериализовать объект он принимает в качестве параметра. Когда вы проходите в строке json, он получает двойную кодировку. Создайте анонимный объект с именем People, а затем сериализуйте его. так что вы можете:

return Content(JsonConvert.SerializeObject(new {People=PersonList})) 

или

return Json(new {People=PersonList}); 
0

вам нужно добавить класс, мы будем называть его People

public class People{ 
    public Person Person{set;get;} 
} 

public JsonResult GetAllPeople() 
{ 
    List<People> PeopleList= new List<People>(); 
    foreach(string data in something){ 
    //Some code to get data 
    Person p = new Person(); 
    p.FirstName = data.FirstName ; 
    p.LastName = data.LastName 
    p.Age = data.Age; 

    PeopleList.Add(new People(){Person = p}); 
    }   
    return Json(new { People = PeopleList },JsonRequestBehavior.AllowGet); 

} 

это возвращает именно то, что вы хотите

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