我正在try 从Unsplash获取一个API来显示图像

然而,我无法显示它们,因为错误CS1579声明:Getting error foreach statement cannot operating on type Root的变量,因为根不包含一个公共定义的'GetEnumerator'.

using Newtonsoft.Json;

namespace ImageAPI
{
    public partial class MainPage : ContentPage
    {
        int count = 0;
        private List<String> lst;
        private object usrName;

        public MainPage()
        {
            InitializeComponent();
            lst = new List<String>();
            BindingContext = this;
        }

        private async void OnCounterClicked(object sender, EventArgs e)
        {
            HttpClient client = new HttpClient();
            var url = "https://api.unsplash.com/search/photos/?page=1&query=office&client_id=R62b2dZL9UoHcYhxook8WAkwklTUcBHqhJEmxe5AEqY";
            try
            {
                HttpResponseMessage response = await client.GetAsync(url);
                var content = await response.Content.ReadAsStringAsync();
                var apiResponse = JsonConvert.DeserializeObject<Root>(content);

                if (response.IsSuccessStatusCode)
                {
                    if (apiResponse != null) {
                        foreach (var photo in apiResponse)
                        {
                            var username = photo.User?.Username;
                           
                             lst.Add(username);
                        }
                        imageListView.ItemsSource = lst;
                    }
                }
                else
                {
                    await DisplayAlert("Error", "Invalid response", "Ok");
                }
            }
            catch (Exception ex)
            {
                await DisplayAlert("Exception", $"{ex.Message}", "Ok");
            }
        }
    }
}

列表视图因此没有更新,没有显示任何内容!

感谢帮助!

推荐答案

好吧,我想我知道你的问题在哪里了.

I did:

1 copy the URL,并将测试项目中的json复制为TestData.json,并将该文件的属性更新为"Copy if newer",这样我就可以在测试中读取它

2 Copied the json again在Visual Studio中创建了一个cs代码文件,并使用Edit—"Past Special"—"Past Json As Class".>> 然后我得到了visual studio为我生成的json中的类.它并不使它漂亮,我有所有小写,但我看不到你使用的类.

如果我使用您提供的链接中的JSON创建类,那么我的"根"类就带有:

public class Rootobject
{
    public int total { get; set; }
    public int total_pages { get; set; }
    public Result[] results { get; set; }
}

这可能不是你所拥有的,请注意,我需要循环超过result而不是Rootobject,但如果我这样做,我可以这样做:

internal class Program
{
    static void Main(string[] args)
    {
        var content = File.ReadAllText("TestData.json");
        var apiResponse = JsonConvert.DeserializeObject<Rootobject>(content);
        if (apiResponse is null)
        {
            throw new Exception("Null json");
        }
        var lst= new List<string>();
        foreach (var photo in apiResponse.results)
        {
            var username = photo.user.username;

            lst.Add(username);
        }

        Console.WriteLine(lst.Count);
    }
}

我认为你可能在错误的类上循环和重复,你的问题与毛伊岛无关.

.net相关问答推荐

";Make Async ValueTask/ValueTask方法分期分配发生了什么?

.NET模拟具有泛型返回类型的方法

如何在 C# 中自动删除临时文件?

什么是提升运算符?

什么是表达式树,如何使用它们,为什么要使用它们?

Int32.ToString() 是特定于文化的吗?

如何 Select 数据表中列的最小值和最大值?

ILMerge 最佳实践

如何将字符串列表数据绑定到 WPF/WP7 中的 ListBox?

IEnumerable Count() 和 Length 的区别

为什么 C# 多维数组不实现 IEnumerable

msbuild,定义条件编译符号

使用 C# 在 .NET 4.0 中 Task.Run 的替代方法是什么?

HashSet 是否保留插入顺序?

哪个更快:清除集合或实例化新的

.NET 中是否有可序列化的通用键/值对类?

如何从 .NET 读取 PEM RSA 私钥

从 C# 中的字符串中删除最后一个字符.优雅的方式?

序列化和反序列化 .NET 对象的最快方法

嵌套捕获组如何在正则表达式中编号?