Json 到 ListView - 无法将类型转换为 IEnumerable - Xamarin

Posted

技术标签:

【中文标题】Json 到 ListView - 无法将类型转换为 IEnumerable - Xamarin【英文标题】:Json to ListView - Can't convert type to IEnumerable- Xamarin 【发布时间】:2020-04-24 12:56:47 【问题描述】:

我很难弄清楚如何将我的 json 数据绑定到列表视图。我有一个错误 topList.ItemsSource = recipes;这是“无法将类型Recipes 隐式转换为IEnumerable。您是否缺少演员表?”

XAML

<ListView x:Name="topList">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Label Text="Binding Title"/>
            </DataTemplate>
        </ListView.ItemTemplate>
</ListView>

C#

        Recipes recipes;
        public HomePage()
        
            InitializeComponent();
            ReadJson();

        

        void ReadJson()
        
            var assembly = typeof(MainPage).GetTypeInfo().Assembly;
            Stream stream = assembly.GetManifestResourceStream("Recipes.json");

            using (var reader = new StreamReader(stream))
            
                var json = reader.ReadToEnd();
                recipes = JsonConvert.DeserializeObject<Recipes>(json);

                topList.ItemsSource = recipes;

            
        

public class Recipes
    
        public List<Recipe> Recipe  get; set; 
    

    public class Recipe
    
        public string Title  get; set; 
        public string Img  get; set; 
    

Json 文件


  "Recipe": [
    
      "title": "Satay Chicken Skewers",
      "img": "satayChicken.jpg"
    ,
    
      "title": "Sweet Potato Spinach Feta Pie",
      "img": "SweetPotatoSpinachFetaPie.jpg"
    
  ]

【问题讨论】:

【参考方案1】:

recipes 是单个对象。 recipes.Recipe 是一个列表(或IEnumerable

topList.ItemsSource = recipes.Recipe;

【讨论】:

当我尝试这个时,我的程序进入中断模式 - System.InvalidCastException: 'Specified cast is not valid.' 根据您发布的代码应该是。它认为recipes.Recipe 是什么类型? System.Collections.Generic.List[配方] 没错。必须有另一行导致异常。检查堆栈跟踪 当我删除那一行时,程序至少会启动,所以我看不出它怎么可能是另一行。我也尝试将它包装在 try and catch 中,但它直接进入了中断模式,并且只给了我在第一条评论中提到的错误,并且没有机会运行 catch 语句。我不知道是什么导致了错误...

以上是关于Json 到 ListView - 无法将类型转换为 IEnumerable - Xamarin的主要内容,如果未能解决你的问题,请参考以下文章

无法在颤动中将json转换为listview

解析 JSON - JSONException:整数无法转换为 JSONObject

将 Json 反序列化为实体框架无法将 int 转换为类型

无法将“JSON”类型的值转换为预期的参数类型“JSON”

无法将类型'Newtonsoft.Json.Linq.JObject'的对象转换为类型

无法将 JSON 响应添加到领域