2011-01-20 4 views
5

Может ли кто-нибудь сказать мне, как я могу десериализовать объект, который содержит несколько атрибутов?Добавить несколько элементов в массиве JSON для объекта в C# с помощью Json.net

Учитывая приведенный ниже сценарий, код работает нормально.

public ActionResult Index() 
{ 
    string json = @"{""name"": ""Person 2"",""email"": ""[email protected]""}"; 

    var emp = JsonConvert.DeserializeObject<Person>(json); 
    Response.Write(emp.name + emp.email); 
    return View(); 
} 

public class Person 
{ 
    public string name { get; set; } 
    public string email { get; set; } 
} 

Но что я должен делать, если массив содержит несколько элементов, например

string json = @"{""data"": [{""name"": ""Person 1"",""email"": ""[email protected]""},{""name"": ""Person 2"",""email"": ""[email protected]""}]}"; 

Заранее спасибо

ответы уже даны ниже, были идеально подходят для этой проблемы я спросил, но теперь я пошел на один шаг вперед. Может ли кто-нибудь посоветовать, что мне нужно сделать, если у json был массив? добавление адреса в?

{ 
    "data": [ 
     { 
      "name": "Person 1", 
      "email": "[email protected]", 
      "address": { 
       "address1": "my address 1", 
       "address2": "my address 2" 
      } 
     }, 
     { 
      "name": "Person 2", 
      "email": "[email protected]", 
      "address": { 
       "address1": "my address 1", 
       "address2": "my address 2" 
      } 
     } 
    ] 
} 
+0

Если ваш класс 'Person' также был расширен с помощью свойства класса' Address', вам не нужно ничего делать. В противном случае вы говорите, что у него нет, и у вас теперь есть это «лишнее» свойство? – Enigmativity

ответ

5

Нечто подобное работал для меня в прошлом:

JObject o = JObject.Parse(json); // This would be the string you defined above 
// The next line should yield a List<> of Person objects... 
List<Person> list = JsonConvert.DeserializeObject<List<Person>>(o["data"].ToString()); 

Вы можете украсить свой объект Person следующим образом:

[JsonObject(MemberSerialization.OptIn)] 
public class Person 
{ 
    [JsonProperty] 
    public string name{get;set;} 
    [JsonProperty] 
    public string email{get;set;} 
} 
2

Вы можете использовать анонимный тип.

var template = new { data = new Person[] { } }; 
Person[] emps = JsonConvert 
    .DeserializeAnonymousType(json, template) 
    .data; 

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

  • Нет связанных вопросов^_^