【问题标题】:RestSharp JSON Array deserializationRestSharp JSON 数组反序列化
【发布时间】:2013-11-27 19:07:59
【问题描述】:

我以 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]'。

我无法弄清楚这里出了什么问题。 我将不胜感激。

【问题讨论】:

    标签: c# restsharp json-deserialization


    【解决方案1】:

    试试这个:

    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

    【讨论】:

    • 我认为由于Elements 属性,他也会遇到问题。 Rows 应该是 List&lt;string&gt;(除非你可以告诉 JSON.net 就是这样,可能通过属性)。
    • 很好,Rows 应该是 List&lt;List&lt;string&gt;&gt;
    • 使用 IList 给我一个编译错误:错误 CS0310:泛型类型或方法中的类型 System.Collections.Generic.IList&lt;ReportResult&gt;' must have a public parameterless constructor in order to use it as parameter T' `ExecuteRequest(RestSharp.RestRequest)' (CS0310)
    • 改成List&lt;ReportResult&gt;,我相应地编辑了答案
    • 另外,尝试 List> 也会出现同样的错误(无法投射...)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多