无法转换对象匿名通用列表

MTL*_*323 -1 .net c# asp.net-mvc casting

如果您有任何想法我将如何枚举对象列表,请告诉我.以下是它的创建方式.由于某种原因,我无法将其转换为List,IList,Enumerable,IEnumerable.我猜它是因为它是如何创建的(由第三方).只是看看是否有人有任何想法.

错误如下:

Unable to cast object of type '<>f__AnonymousType5`1[System.Collections.Generic.List`1[SugarRest.Model.AMP_Product_Line]]' to type 'System.Collections.Generic.List`1[SugarRest.Model.AMP_Product_Line]'.
Run Code Online (Sandbox Code Playgroud)

该对象创建如下:

private static AMP_Contract CreateCrmContract(ContractDetailViewModel model, int bookmanContractNumber, int renewedFromContractNumber)
        {
            List<AMP_Product_Line> productLines = CreateProductLinesPrint(model, bookmanContractNumber);

            //Contract
            AMP_Contract ampContract = new AMP_Contract();

            ...

            ampContract.amp_amp_contracts_amp_amp_product_lines = new { productLines };

            return ampContract;
        }

public class AMP_Contract
    {              
        ...
        public object amp_amp_contracts_amp_amp_product_lines { get; set; }
        ...
    }
Run Code Online (Sandbox Code Playgroud)

我尝试访问/枚举的对象如下:

虚电路

在此输入图像描述

我也试过这个,但是,有问题的对象不是可枚举的,因为它是一个对象.

在此输入图像描述

Eri*_*ert 5

首先:编写此代码的人正在积极尝试阻止您访问该集合.你应该认真思考试图击败他们的企图是否正确; 他们可能是因为某种原因而隐藏起来的.

最简单的方法是使用dynamic来读取匿名类型的值.然后,您可以动态转换为所需的序列类型:

var contract = CreateCrmContract(...whatever...);
dynamic d = contract.amp_amp_contracts_amp_amp_product_lines;
IEnumerable<AMP_Product_Line> lines = d.productLines;
Run Code Online (Sandbox Code Playgroud)

现在我们回到了静态类型的世界:

foreach (AMP_Product_Line line in lines)
  Console.WriteLine(line);
Run Code Online (Sandbox Code Playgroud)