繁体   English   中英

将动态对象转换为IEnumerable Issue

[英]Convert dynamic object to IEnumerable Issue

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 <object>'。 存在显式转换(您是否缺少演员表?)

我不必做任何假设。

  • 我假设您的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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM