Obtener el método Api flurl.http utilizado

Aug 23 2020

Estoy llamando a una API usando Flurl.http que contiene el campo Valor y Texto. ¡Estoy usando esa API en Picker!

async void method()
        {
            string url = "http://xxx.xxx.xxx.xx/api/QMSRejection/GetShiftMaster";
            IList<dynamic> list = await url.GetJsonListAsync();
            var modelList = new List<string>();
            
            foreach (var item in list)
            {
                modelList.Add(item.Text);
                
            }
            ShiftPicker.ItemsSource = modelList;

        }

esta es la respuesta json api proporciona

{"Value":"SF2017-1","Text":"General Shift Head Office"},{"Value":"SF2017-2","Text":"Shift-A-1 (Day)"},{"Value":"SF2017-3","Text":"Shift-B-1 (Night)"},{"Value":"SF2017-4","Text":"Shift-C"},{"Value":"SF2017-5","Text":"Shift-9.00AM-6.00PM"},{"Value":"SF201711","Text":"Morning Shift (6.00 Am-3.00Pm)"},{"Value":"SF20171203","Text":"Shift 6:30AM to 3:00PM"},{"Value":"SF2018-1","Text":"General Shift Factory-1"},{"Value":"SF20182","Text":"Shift 10AM to 8PM"},{"Value":"SF20191","Text":"General Shift Factory-2"},{"Value":"SF20192","Text":"Shift 7:00AM to 4:00PM"},{"Value":"SF20193","Text":"Shift-A-2 (Day)"},{"Value":"SF20194","Text":"Shift-B-2 (Night)"}]

Estoy obteniendo los datos correctamente y también puedo obtener el elemento seleccionado, pero el problema es que solo he agregado un campo de texto, ¡pero también necesito acceso al campo de valor!

En este momento, cuando tengo que pasar el valor seleccionado del menú desplegable, solo tengo texto y también necesito un campo de valor asociado para poder usarlo. Mostraré solo texto, ¡pero necesito acceder a él!

Respuestas

1 Jason Aug 23 2020 at 05:31

como sugirió @Iria, primero defina una clase de modelo para sus datos

public class MyClass{
  public string Value{get;set;}
  public string Text{get;set}
}

luego dígale a flurl que devuelva una clase fuertemente tipada en lugar de usar dinámica

var data = await url.GetJsonAsync<List<MyClass>>();

entonces puede vincular su selector directamente a los datos

ShiftPicker.ItemsSource = data;
Iria Aug 23 2020 at 03:36

Yo haría lo siguiente:

var results = await url.GetJsonListAsync();
var myClass =  JsonSerializer.Deserialize<IEnumerable<MyClass>>(results);

Después

public class MyClass{
public string Value{get;set;}
public string Text{get;set}
}

en myClass tienes una colección de objetos que tienen Valor y Texto, luego tienes la correspondencia entre valor y Texto para cada objeto