Xamarin 如何根据 id 从 Rest API 加载 listView 详细信息?

Xamarin How to load listView detail from Rest API based on id?

我有列表视图。单击该项目时,它将打开详细信息页面。但是为了性能问题,在restAPI中我设置它只发送listView需要的数据。这就是为什么我想从单击的列表视图中获得对基于 api 的 id 的新请求。

listview.xaml.cs:

        private async void OnItemSelected(object sender, ItemTappedEventArgs e)
        {
        var itemDetail = e.Item as Data.Models.ModelAttendance.Attendance;
        await Navigation.PushAsync(new ListDetailAttendPage
            (
                itemDetail.Id, itemDetail.Image, itemDetail.Created, itemDetail.AddressDetail,
                itemDetail.Note, itemDetail.Activity
            ));
        }

listViewDetail.xaml.cs

    private ObservableCollection<Data.Models.ModelAttendance.Attendance> _attendances;

    public ListDetailAttendPage (long id, byte[] image, DateTime created, string addressDetail, string note, string activity)
    {
        InitializeComponent ();

        long idItem = id;
        ImgSelfie.Source = ImageSource.FromStream(() => new MemoryStream(image));
        EntTime.Text = created.ToString();
        EdtLocation.Text = addressDetail;
        EntNote.Text = note;
        LblAction.Text = activity;

    }

    protected override void OnAppearing()
    {
        _attendances = new ObservableCollection<Data.Models.ModelAttendance.Attendance>();
        base.OnAppearing();
    }

我在列表视图页面中使用的 API 代码:

    [HttpGet]
    public IActionResult GetM_ATTENDANCE()
    {
        var data = _context.M_ATTENDANCE.Select(f => new Attendance
        {
            Id = f.Id,
            Name = f.Name,
            Activity = f.Activity,
            Created = f.Created
        }).OrderByDescending(x => x.Id).ToList();

        var tempJson = new
        {
            Data = data,
            Size = data.Count
        };
        return Json(tempJson);
    }

我如何在 xamarin.form 中做到这一点?我已经搜索过,但没有正确的解决方案。这是我尝试过的方法,但我仍然无法获得想要的数据:

    private ObservableCollection<Data.Models.ModelAttendance.Attendance> _attendances;
    HttpClient client = new HttpClient();

    public ListDetailAttendPage (long id, byte[] image, DateTime created, string addressDetail, string note, string activity)
    {
        InitializeComponent ();

        long idItem = id;
        ImgSelfie.Source = ImageSource.FromStream(() => new MemoryStream(image));
        EntTime.Text = created.ToString();
        EdtLocation.Text = addressDetail;
        EntNote.Text = note;
        LblAction.Text = activity;

        Task.Run(async () =>
        {
            await GetItem(idItem);
        });

    }

    async Task GetItem(long id)
    {
        HttpResponseMessage message = await client.GetAsync(string.Format("http://[url]:[port]/api/attendances/" + id));
        string jsonString = await message.Content.ReadAsStringAsync();

     //what should I do next to get the data here?

    }

    protected override void OnAppearing()
    {
        _attendances = new ObservableCollection<Data.Models.ModelAttendance.Attendance>();
        base.OnAppearing();
    }

我已经休息 API 以根据 id 获得响应,但不知道如何在 Xamarin 中使用它:

        // GET: api/Attendances/5
    [HttpGet("{id}")]
    public async Task<IActionResult> GetAttendance(long id)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        var attendance = await _context.M_ATTENDANCE.FindAsync(id);

        if (attendance == null)
        {
            return NotFound();
        }

        return Ok(attendance);
    }

我刚开始学习xamarin,有什么不懂的请教我

非常感谢您的帮助^_^

只需将 JSON string 反序列化为 class Model

using Newtonsoft.Json;

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();


        testAsync();
    }

    public async Task testAsync() {

        string json = @"{
              'id': '123',
              'name': 'User name',
              'nik': '213123'
            }";

        Model m = JsonConvert.DeserializeObject<Model>(json);

        Console.WriteLine(m.name);
        Console.WriteLine(m.nik);

    }
}

public class Model
{
    public string id { get; set; }
    public string name { get; set; }
    public string nik { get; set; }
    public string Created { get; set; }
}

更新: 在主线程

中更新UI
  Device.BeginInvokeOnMainThread(() => {
                EdtLocation.Text = result.AddressDetail;
                //...
            });