将动态对象转换为IEnumerable问题

时间:2018-04-29 07:47:57

标签: c# .net oop

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&lt; object&gt;'。存在显式转换(您是否错过了演员?)

1 个答案:

答案 0 :(得分:0)

我必须做出一些假设。

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