JSON反序列化问题

时间:2014-01-05 15:34:46

标签: c# .net json json.net

我得到了一个JSON响应,例如:

JSON

"meta": {
    "code": 200
  },
  "data": [
    {
      "username": "username here",
      "bio": "bio here",
      "website": "web site here",
      "profile_picture": "link here",
      "full_name": "name here",
      "id": "id here"
    }
  ]

C#

public class Meta
{
    public int code { get; set; }
}

public class Datum
{
    public string username { get; set; }
    public string bio { get; set; }
    public string website { get; set; }
    public string profile_picture { get; set; }
    public string full_name { get; set; }
    public string id { get; set; }
}

public class RootObject
{
    public Meta meta { get; set; }
    public List<Datum> data { get; set; }
}

我写了这段代码:

JObject instaCall = JObject.Parse(response);
Datum searchResult = instaCall["data"].ToObject<Datum>();

但产生错误:

  

无法将当前JSON数组(例如[1,2,3])反序列化为类型   'WindowsFormsApplication1.functions.response + Datum'因为类型   需要一个JSON对象(例如{“name”:“value”})来反序列化   正确。

     

要修复此错误,请将JSON更改为JSON对象(例如   {“name”:“value”})或将反序列化类型更改为数组或a   实现集合接口的类型(例如ICollection,IList)   像可以从JSON数组反序列化的List。   JsonArrayAttribute也可以添加到类型中以强制它   从JSON数组反序列化。

2 个答案:

答案 0 :(得分:2)

这样的事情怎么样:

var o = JsonConvert.DeserializeObject<RootObject>(response);
Datum searchResult = o.data.FirstOrDefault();

if (searchResult != null)
{
    // awesome
}

答案 1 :(得分:1)

由于错误试图告诉您,instaCall["data"]是一个数组 你不能把它读成一个对象。