2012-01-05 10 views
5

He siguiente JSON cadena: (.. Como se puede observar por desgracia, tengo una especie de elemento de "raíz" para cada objeto de la matriz Sin este elemento "raíz" la tarea se vuelve bastante trivial)¿Cómo deserializar la matriz JSON con el elemento "raíz" para cada objeto en la matriz usando Json.NET?

[ 
    { "Person" : { "Name" : "John", "Gender" : "male" } }, 
    { "Person" : { "Name" : "John", "Gender" : "male" } } 
] 

tengo deserializar en una lista de Person clase:

class Person { 
    public string Name { get; set; } 
    public string Gender { get; set; } 
} 
... 
List<Person> ListPersons() { 
    return JsonConvert.DeserializeObject<List<Person>>(jsonString); 
} 

¿es posible que ver con Json.NET sin crear clase contenedora como PersonResult?

class PersonResult { 
    public Person Person { get; set; } 
} 
... 
List<Person> ListPersons() { 
    return JsonConvert.DeserializeObject<List<PersonResult>>(jsonString) 
         .Select(p => p.Person) 
         .ToList(); 
} 

La solución perfecta para mí es ser capaz de alguna manera explícita especificar esta "raíz" (por ejemplo, a través de atributo) y no cree ninguna envoltorios, ayudantes, etc.

Respuesta

4

Desafortunadamente, no hay mucho que se puede hacer sobre este tema. Así es como se ve el formato JSON y no hay forma de evitarlo. Como resultado, Json.Net "ve" la cadena como más o menos:

una matriz de objetos con Person propiedad, que es otro objeto con NameGender y propiedades

Usted podría posiblemente juegue con el ContractResolvers personalizado para forzar que el serializador funcione de manera diferente ... pero eso es bastante trabajo. La clase de envoltura como usted sugirió es cómo se tratan esos problemas, y sugiero que se apegue a ella.

+0

Sí, lamentablemente tuve que terminar con el enfoque de envoltura. Gracias. –

Cuestiones relacionadas