![](/img/trans.png)
[英]System.InvalidCastException: Unable to cast COM object of type 'System.__ComObject' to interface type 'System.Collections.IEnumerable'
[英]MVC displaying collection: InvalidCastException: Unable to cast object of type 'Models.ConversionRate' to type 'System.Collections.IEnumerable'
我有一個對象,我成功地將它傳遞給我的視圖,其中包含一個正確填充的集合。
我的模型。 convert_rates 只是雙打的集合:
public class Converter
{
public string result { get; set; }
public string documentation { get; set; }
public string terms_of_use { get; set; }
public string time_zone { get; set; }
public string time_last_update { get; set; }
public string time_next_update { get; set; }
public ConversionRate conversion_rates { get; set; }
}
我的控制器。 currencyConverter 正確傳遞到我的觀點:
public class Rates
{
public static Converter Import()
{
try
{
string URLString = "https://v6.exchangerate-api.com/v6/APIKey/latest/gbp";
using (var webClient = new System.Net.WebClient())
{
var json = webClient.DownloadString(URLString);
Converter Test = JsonConvert.DeserializeObject<Converter>(json);
return Test;
}
}
catch (Exception e)
{
...
}
}
}
public IActionResult Index()
{
var currencyConverter = Rates.Import();
return View(currencyConverter);
}
我的觀點:
@using System.Collections;
@model Converter
@foreach (var currency in (IEnumerable)Model.conversion_rates)
{
<tr>
<td>
@currency
</td>
</tr>
}
在調試器中,我可以看到 Model.conversion_rates 已正確填充,但我無法將每個單獨的元素存儲在我的 var 貨幣中以顯示在我的表中。
我可以訪問每個單獨的元素並通過執行以下操作來很好地顯示它們:
**@Successfully pulled data: @Model.conversion_rates.AED**
但由於許多原因,這並不實用。 可以動態添加新值等。所以我需要訪問我的 Converter.conversion_rates 中的數據,這是我需要訪問的集合。
這是我遇到的一個答案,但它給了我以下錯誤:
InvalidCastException:無法將“Models.ConversionRate”類型的對象轉換為“System.Collections.IEnumerable”類型。
我能找到的最值得注意的類似答案建議將我返回的模型本身轉換為 IEnumerable,但它不起作用。 我假設這是因為我只返回一個對象,而我想要訪問的實際集合在 Converter 對象本身內部,因此將 Converter 轉換為 1 的集合無濟於事。 此外,如果我這樣做,我也無法直接訪問 Model.conversion_rates。
@model IEnumerable<Converter>
@foreach (var currency in Model.conversion_rates)
{
<tr>
<td>
@currency
</td>
</tr>
}
感謝任何建議。
編輯:所以我嘗試的早期修復似乎是正確的,我的模型更好:
public IEnumerable<ConversionRate> conversion_rates { get; set; }
但這弄亂了我的 json 反序列化。 如果我找到修復程序會更新。
最終代碼:
只需修復您的課程
public class Converter
{
......
public ConversionRate conversion_rates { get; set; }
public IEnumerable<ConversionRateItem> ConversionRateItems { get; set; }
}
public class ConversionRateItem
{
public string Name {get; set;}
public double Value {get; set;}
}
和行動
var currencyConverter = Rates.Import();
var items = currencyConverter.conversion_rates.GetType()
.GetProperties()
.Select(p => new ConversionRateItem
{
Name=p.Name,
Value = (double) p.GetValue(currencyConverter .conversion_rates, null)
}).ToArray();
converter.ConversionRateItems=items;
converter.conversion_rates=null;
return View(currencyConverter);
最后查看
@foreach (var currency in Model.ConversionRateItems)
{
<tr>
<td>
@currency.Name
</td>
<td>
@currency.Value
</td>
</tr>
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.