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)
我尝试访问/枚举的对象如下:
我也试过这个,但是,有问题的对象不是可枚举的,因为它是一个对象.
首先:编写此代码的人正在积极尝试阻止您访问该集合.你应该认真思考试图击败他们的企图是否正确; 他们可能是因为某种原因而隐藏起来的.
最简单的方法是使用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)