【问题标题】:RestSharp: Unable to cast object of type 'RestSharp.JsonArray' to type 'System.Collections.Generic.IDictionary`RestSharp:无法将“RestSharp.JsonArray”类型的对象转换为“System.Collections.Generic.IDictionary”类型
【发布时间】:2017-10-30 11:27:06
【问题描述】:

目前无法解决问题:无法将“RestSharp.JsonArray”类型的对象转换为“System.Collections.Generic.IDictionary`2[System.String,System.Object”类型的对象——我可以看到这个错误在这里,在响应本身中:

var response = client.Execute<ThirdPartySuggester>(request);

但我在这里得到的 NullReferenceExeption:

var name = response.Data.Name;

这是我的测试课:

    public class Class1
    {
        [Theory]
        [InlineData("apple", "en-us")]
        public void SearchTest(string searchPhrase, string language)
        {
            var client = new RestClient("https://test_site/api");
            var request = new RestRequest("/thirdparty/suggester?searchPhrase={search_key}&marketLocale={language_id}", Method.GET);
            request
                .AddUrlSegment("search_key", searchPhrase)
                .AddUrlSegment("language_id", language);
            var response = client.Execute<ThirdPartySuggester>(request);

            var name = response.Data.Name;
            var manufacturer = response.Data.Manufacturer;
            var deviceType = response.Data.DeviceType;
            var searchKey = response.Data.SearchKey;

.....

我得到的响应包含以下数据:

[
  {
    "name": "iPhone 7 Plus",
    "manufacturer": "Apple",
    "deviceType": "smartphone_tablet",
    "searchKey": "apple_iphone_7_plus"
  },
  {
    "name": "iPhone 4s",
    "manufacturer": "Apple",
    "deviceType": "smartphone_tablet",
    "searchKey": "apple_iphone_4s"
  },
  {
    "name": "iPhone 6",
    "manufacturer": "Apple",
    "deviceType": "smartphone_tablet",
    "searchKey": "apple_iphone_6"
  },
  {
    "name": "iPod Touch 8th Generation",
    "manufacturer": "Apple",
    "deviceType": "smartphone_tablet",
    "searchKey": "apple_ipod_touch_8th_generation"
  },
  {
    "name": "iPhone 7",
    "manufacturer": "Apple",
    "deviceType": "smartphone_tablet",
    "searchKey": "apple_iphone_7"
  }
] 

这是我要反序列化的实现类:

public class ThirdPartySuggester
{
    public string Name { get; set; }
    public string Manufacturer { get; set; }
    public string DeviceType { get; set; }
    public string SearchKey { get; set; }
}

各位,我将不胜感激!

【问题讨论】:

  • 我认为您没有显示出现此错误的代码。您的响应是一个数组,我没有看到您试图将其转换为字典的任何代码。您的代码似乎需要一个 ThirdPartySuggester,请发布 MCVE
  • 感谢@pstrjds 的评论,我刚刚编辑了我的帖子。是的,我想你是对的,因为我将 ThirdPartySuggester 写成一个单独的。如何正确的把它变成字典?

标签: c# deserialization restsharp


【解决方案1】:

您将返回一个 ThirdPartySuggester 数组,因此您需要指定一个 List :

var response = client.Execute<List<ThirdPartySuggester>>(request);

然后要访问它们,请使用循环

foreach (ThirdPartySuggester item in response.Data)
{
  //get each items properties
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-12-07
      • 2016-06-13
      • 1970-01-01
      • 2021-12-06
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      相关资源
      最近更新 更多