在c#中反序列化json字符串(数组)的一部分

时间:2016-05-19 22:24:29

标签: c# json

我有一个像这样的json字符串:

{  
"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
}

我只想反序列化GuestValues数组。我创建了一个这样的类:

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

并称之为:

GuestValueResult guestValues = JsonConvert.DeserializeObject<GuestValueResult>(jsongString);

但它不起作用。我尝试了很多,一旦它以某种方式,它只返回jsonString中的第一个"A""B""C""GuestValues"上方的那个,我没有想要那组数据。我只想要那些"GuestValues"内的人。请帮忙。

2 个答案:

答案 0 :(得分:4)

我不知道你发布的代码如何返回任何有用的值,因为你有一个未映射的Results数组。

您需要创建另一个类

 public class ResultsResult
 {
    public GuestValueResult[] Results { get; set; }
 }

然后使用类

反序列化
 ResultsResult guestValues = JsonConvert.DeserializeObject<ResultsResult>(jsongString);

然后你会得到你所期望的。

答案 1 :(得分:4)

您可以使用Linq to JSON(JSON.NET的一部分)来访问相关节点,然后对其进行反序列化:

var root = JObject.Parse(jsonString);
var guestValues = root["Results"][0]["GuestValues"].ToObject<GuestValue[]>();