2014-01-06 3 views
0

Если у меня есть простая модель, как это:Итерация через объект JSON на стороне сервера

public class Person 
{ 
    public string ID { get; set; } 
    public string Name { get; set; } 
    public string Age { get; set; } 
} 

и у меня есть JSON объект вроде этого:

var people = { 
    items: [ 
     { id: "1", name: "j", age: "11"} 
    ] 
}; 

и я передать его WebMethod так:

Project.Web.Services.AJAXService.Save(JSON.stringify(people), function (result) { 
    // 
}); 

Как десериализации это на сервере, чтобы я мог перебирать его с помощью foreach?

Я попытался это:

[WebMethod(true)] 
public void Save(string peopleJson) 
{ 
    List<Person> people = JsonConvert.DeserializeObject<List<Person>>(peopleJson); 

    foreach (var person in people) 
    { 
     string str = person.Name; 
    } 
} 

Но бросает следующих Exception:

Не может десериализации текущего объекта JSON (например, { "имя": "значение"}) в тип 'System.Collections.Generic.List`1 [Project.Data.Models.Person]' , потому что для типа требуется массив JSON (например, [1,2,3]) для десериализации correctl у

редактировать: Я только что узнал из this question, что на самом деле это не JSON но JavaScript литерал объекта нотации, но я все равно хочу, чтобы быть в состоянии разобрать, что я здесь.

edit2: Это содержание peopleJson: "{\"items\":[{\"id\":\"1\",\"name\":\"j\",\"age\":\"11\"}]}"

+0

а) вы объявляете 'people' дважды. б) каково содержание «струнных людей»? –

+0

Спасибо, я отредактировал, чтобы исправить это. Я еще раз отредактирую содержимое строки – user982119

+0

, используя wcf? если это так, то должна работать подпись public void Save (Список человек). – c0deMonk3y

ответ

1

Используйте этот класс для десериализации

JsonConvert.DeserializeObject<Root>(peopleJson); 

public class Root 
{ 
    public List<Person> items { get; set; } 
} 
+0

Спасибо. огромная помощь – user982119

1

Проблема в items обертке. Он должен быть

JsonConvert.DeserializeObject<ListOfPersons>(peopleJson)

где

public class ListOfPersons 
{ 
    public Person[] Items {get; set;} 
} 
Смежные вопросы