Конвертировать динамический объект в IEnumerable Issue - PullRequest
0 голосов
/ 29 апреля 2018
protected override IEnumerable<dynamic> GetData()
{
    var request = new RestRequest();
    var directoryResponse = client.ExecuteTaskAsync(request).Result;

    dynamic directory = JsonConvert.DeserializeObject<MyDTO>(directoryResponse.Content);

    cachedDirectory = directory;
}

return cachedDirectory;

Проблема на линии

cachedDirectory = directory;

Всякий раз, когда он пытается преобразовать объект dynamic в тип IEnumerable.

Сообщение об исключении:

Невозможно неявно преобразовать тип 'MyDTO' в 'System.Collections.Generic.IEnumerable '. Существует явное преобразование (вам не хватает приведения?)

1 Ответ

0 голосов
/ 29 апреля 2018

Я должен сделать несколько предположений.

  • Я предполагаю, что ваш объект cachedDirectory относится к типу IEnumerable. Если это так, то ясно, что он не может преобразовать объект MyDTO в IEnumerable во время выполнения, и он генерирует исключение.

Следующий код дает вам ошибку. Я полагаю, вам нужно перечислить.

    public class NewTest
    {
        IEnumerable<dynamic> cachedDirectory;
        public IEnumerable<dynamic> GetData()
        {
            dynamic directory = JsonConvert.DeserializeObject<MyDTO>("{ 'Name' : 'Test'  }");
            cachedDirectory = directory;
            return cachedDirectory;            
        }
    }

    public class MyDTO
    {
        public string Name { get; set; }
    }

// Вот как вы звоните. (Этот код дает ошибку)

    NewTest test = new NewTest();
    IEnumerable<dynamic> result = test.GetData();

Ответ: Если выше, как вы используете, то вы можете сделать что-то вроде этого.

public class NewTest
{
    IEnumerable<dynamic> cachedDirectory;
    public IEnumerable<dynamic> GetData()
    {
         var request = new RestRequest();
        var directoryResponse = client.ExecuteTaskAsync(request).Result;
        dynamic directory = JsonConvert.DeserializeObject<IEumerable<MyDTO>>(directoryResponse.Content);            
        return directory;            
    }
}

public class MyDTO
{
    public string Name { get; set; }
}

// Теперь это будет работать.

    NewTest test = new NewTest();
    IEnumerable<dynamic> result = test.GetData();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...