I have a json string like this:
{
"Results":[
{
"attr1": "value1",
"attr2": "value2",
"A": "value_a",
"B": "value_b",
"C": "value_c",
"GuestValues":[
{
"A": "value_a",
"B": "value_b",
"C": "value_c"
},
{
"A": "value_a",
"B": "value_b",
"C": "value_c"
},
{
"A": "value_a",
"B": "value_b",
"C": "value_c"
}
}
],
"TotalResults":1,
"MilliSeconds":11
}
I want to deserialize only the GuestValues array. I created a class like this:
public class GuestValue
{
public string A;
public string B;
public string C;
}
public class GuestValueResult
{
public List<GuestValue> GuestValues { get; set; }
public in TotalResults { get; set; }
}
And call it like this:
GuestValueResult guestValues = JsonConvert.DeserializeObject<GuestValueResult>(jsongString);
But it doesn't work. I tried a lot, once somehow, it only gives me back the first "A"
, "B"
, "C"
in the jsonString, the one above the "GuestValues"
, I don't want that group of data. I only want those inside "GuestValues"
. Please help.
You can use Linq to JSON (part of JSON.NET) to access the relevant node, then deserialize it:
var root = JObject.Parse(jsonString);
var guestValues = root["Results"][0]["GuestValues"].ToObject<GuestValue[]>();
I don't know how the code you posted returns any useful value at all given that you have an Results array which is not mapped.
You need to create another class like this
public class ResultsResult
{
public GuestValueResult[] Results { get; set; }
}
And then deserialize using the class
ResultsResult guestValues = JsonConvert.DeserializeObject<ResultsResult>(jsongString);
You'll then get what you expect.
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