I have following JSON string:
[
{ "Person" : { "Name" : "John", "Gender" : "male" } },
{ "Person" : { "Name" : "John", "Gender" : "male" } }
]
(As you may notice unfortunately I have a sort of "root" element for each object in the array. Without this "root" element the task becomes quite trivial.)
I have to deserialize it into a list of Person
class:
class Person {
public string Name { get; set; }
public string Gender { get; set; }
}
...
List<Person> ListPersons() {
return JsonConvert.DeserializeObject<List<Person>>(jsonString);
}
Is it possible to do with Json.NET without creating wrapper class like PersonResult?
class PersonResult {
public Person Person { get; set; }
}
...
List<Person> ListPersons() {
return JsonConvert.DeserializeObject<List<PersonResult>>(jsonString)
.Select(p => p.Person)
.ToList();
}
The perfect solution for me is to be able somehow explicitly specify this "root" (e.g. via attribute) and do not create any wrappers, helpers, etc.
Unfortunatelly, there's not much you can do about this issue. That's how JSON format looks like and there's no way around that. As a result, Json.Net "sees" your string as more or less:
an array of objects with
Person
property, which is another object withName
andGender
properties
You could possibly play some with custom ContractResolvers to force serializer to work differently... but that's quite a bit of work. Wrapper class like you suggested is how those problems are dealt with, and I suggest sticking to it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With