无法将JSON对象反序列化为类型'System.Collections.Generic.List`1 [obJson]'

时间:2012-05-29 09:33:38

标签: c# json json.net

我正在尝试反序列化(使用Newtonsoft)JSON并在c#中转换为List。它抛出了我的错误“无法将JSON对象反序列化为类型'System.Collections.Generic.List`1 [obJson]'。”

这是我的JSON字符串:

  string webContent = "{\"searchResults\":     [{\"gefId\":0,\"resultNumber\":1,\"distance\":4.2839,\"sourceName\":\"MQA.MQ_34172_HD\",\"name\":\"USER_DEFINED\"},{\"gefId\":0,\"resultNumber\":1,\"distance\":4.2839,\"sourceName\":\"MQA.MQ_34172_HD\",\"name\":\"USER_DEFINED\"}]}";

转换,此行抛出错误:

  List<obJson> result = JsonConvert.DeserializeObject<List<obJson>>(webContent);

我的自定义类:

public class SearchResults
{
    public int gefId { get; set; }
    public int resultNumber { get; set; }
    public decimal distance { get; set; }
    public string sourceName { get; set; }
    public string name { get; set; }
}

public class obJson
{
    public SearchResults SearchResults { get; set; }
}

3 个答案:

答案 0 :(得分:2)

由于您的json是searchResults成员包含数组的对象,因此请更改obJson,如下所示

public class obJson
{
    public List<SearchResults> searchResults { get; set; }
}

并反序列化为

obJson result = JsonConvert.DeserializeObject<obJson>(webContent);

答案 1 :(得分:1)

问题在于您的模型,或者与您发送的数据相反。您正在接收一个数组,并希望将其反序列化为普通对象。您可以像

一样更改模型
public class obJson
{
    public SearchResults[] SearchResults { get; set; }
}

并且您的结果将被反序列化。

答案 2 :(得分:0)

你的json无效。

Parse error on line 1:
{    \"searchResults\": [
-----^
Expecting 'STRING', '}'

http://jsonlint.com/