RestSharp JSON数组反序列化

时间:2013-11-27 19:07:59

标签: c# restsharp json-deserialization

我以JSON格式启动此RestSharp查询:

var response = restClient.Execute<Report>(request);

我得到的回复包含此数据

[
    {
        "Columns":
        [
            {"Name":"CameraGuid","Type":"Guid"},
            {"Name":"ArchiveSourceGuid","Type":"Guid"},
            {"Name":"StartTime","Type":"DateTime"},
            {"Name":"EndTime","Type":"DateTime"},
            {"Name":"TimeZone","Type":"String"},
            {"Name":"Capabilities","Type":"UInt32"}
        ],
        "Rows":
        [
            [
                "00000001-0000-babe-0000-00408c71be50",
                "3782fe37-6748-4d36-b258-49ed6a79cd6d",
                "2013-11-27T17:52:00Z",
                "2013-11-27T18:20:55.063Z",
                "Eastern Standard Time",
                2147483647
            ]
        ]
    }
]

我正在尝试将其反序列化为这组类:

public class Report
{
    public List<ReportResult> Results { get; set; }
}

public class ReportResult
{
    public List<ColumnField> Columns { get; set; }
    public List<RowResult>   Rows { get; set; }
}

public class ColumnField
{
    public string Name { get; set; }
    public string Type { get; set; }
}

public class RowResult
{
    public List<string> Elements { get; set; }
}

不幸的是,结果数据为空,我得到了这个例外:

  

无法将“RestSharp.JsonArray”类型的对象强制转换为类型   'System.Collections.Generic.IDictionary`2 [System.String,System.Object的]'。

我无法弄清楚这里有什么问题。 非常感谢我的帮助。

2 个答案:

答案 0 :(得分:22)

试试这个:

var response = restClient.Execute<List<ReportResult>>(request);

修改

您还应将ReportResult更改为:

public class ReportResult
{
  public List<ColumnField> Columns { get; set; }
  public List<List<string>>   Rows { get; set; }
}

你可以摆脱ReportRowResult

答案 1 :(得分:0)

还有另一种创建包装器类的方法:

public class ThirdPartySuggesters : List<ThirdPartySuggester> {}
var response = client.Execute<ThirdPartySuggesters>(request);