因此,如果您遇到可以像這樣使用 vb 訪問物件的情況
Private Sub LoadAssetEvents(OpenSeaData)
For Each mRoot As Assets In OpenSeaData
For Each item As AssetEvent In mRoot.asset_events
If item.asset_bundle IsNot Nothing Then
For Each item_single In item.asset_bundle.assets
ObtainEventDetails(item, item_single)
Next
Else
ObtainEventDetails(item, Nothing)
End If
Next
Next
End Sub
物件item.asset_bundle包含assets一些的陣列Assets
沒有任何問題,我可以訪問它們并遍歷它們。該代碼轉換為 C#
private void LoadAssetEvents(object OpenSeaData)
{
foreach (Assets mRoot in OpenSeaData as System.Collections.IEnumerable)
{
foreach (AssetEvent item in mRoot.asset_events)
{
if (item.asset_bundle != null)
{
foreach (object item_single in item.asset_bundle.assets as System.Collections.IEnumerable)
{
ObtainEtherScanDetails(item, item_single);
}
}
else
ObtainEtherScanDetails(item, null);
}
}
}
正在投擲
“object”不包含“assets”的定義,并且找不到接受“object”型別的第一個引數的可訪問擴展方法“assets”(您是否缺少 using 指令或程式集參考?)
我不知道有什么區別 除錯模式說這是 JProperty

但進一步我可以導航到這兩個資產

C# - 類
VB - 類
uj5u.com熱心網友回復:
這不是正確的轉換。“item_single”在原始代碼中不是“object”型別——編譯器會推斷它,假設設定了“Option Infer On”(它似乎是)。正確的 C# 轉換也使用推斷型別,通過“var”:
foreach (var item_single in item.asset_bundle.assets)
uj5u.com熱心網友回復:
以將 JProperty 加載到動態 JSON 然后回圈遍歷的方式解決了這個問題
if (item.asset_bundle != null)
{
dynamic data = JsonConvert.DeserializeObject(item.asset_bundle.ToString());
foreach (var item_single in data.assets as System.Collections.IEnumerable)
{
Asset dataA = JsonConvert.DeserializeObject<Asset>(item_single.ToString());
while (true)
{
if (ObtainEtherScanDetails(item, dataA))
break;
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/368459.html
