Pregunta

Puede alguien decirme cómo puedo deserializar un objeto que contiene múltiples atributos?

Dado el escenario a continuación, el código funciona bien.

public ActionResult Index()
{
    string json = @"{""name"": ""Person 2"",""email"": ""example@example.com""}";

    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; }
}

Pero lo que tengo que hacer si la matriz contiene varios elementos, por ejemplo

string json = @"{""data"": [{""name"": ""Person 1"",""email"": ""test@test.com""},{""name"": ""Person 2"",""email"": ""example@example.com""}]}";

Gracias de antemano

Las respuestas ya dadas a continuación fueron perfectos para el problema pregunté, pero ahora que he ido por delante el paso uno. Puede cualquier persona aconsejar sobre lo que había que hacer si el JSON tenía un arsenal en ella, por ejemplo, la adición de una dirección en?

{
    "data": [
        {
            "name": "Person 1",
            "email": "test@test.com",
            "address": {
                "address1": "my address 1",
                "address2": "my address 2" 
            } 
        },
        {
            "name": "Person 2",
            "email": "example@example.com",
            "address": {
                "address1": "my address 1",
                "address2": "my address 2" 
            } 
        } 
    ] 
}
¿Fue útil?

Solución

Algo como esto ha funcionado para mí en el pasado:

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());

Es posible que desee adornar su persona objeto de la siguiente manera:

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

Otros consejos

Se podría utilizar un tipo anónimo.

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

deserializar como:

public class JsonData
{
  public List<Person> Data {get;set;}
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top