Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

deserialize part of json string (array) in c#

Tags:

json

c#

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.

like image 329
Carrie Avatar asked May 19 '16 22:05

Carrie


2 Answers

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[]>();
like image 109
Thomas Levesque Avatar answered Sep 21 '22 06:09

Thomas Levesque


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.

like image 43
bbeda Avatar answered Sep 21 '22 06:09

bbeda