Obtenir la méthode Api flurl.http utilisée
J'appelle un APi en utilisant Flurl.http qui contient le champ Valeur et Texte. J'utilise cette API dans 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;
}
c'est l'api de réponse json fournit
{"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)"}]
J'obtiens les données correctement et je peux également récupérer l'élément sélectionné, mais le problème est que je n'ai ajouté qu'un champ de texte, mais j'ai également besoin d'accéder au champ de valeur !
À l'heure actuelle, lorsque je dois transmettre la valeur sélectionnée de la liste déroulante, je n'ai que du texte et j'ai également besoin d'un champ de valeur associé pour pouvoir l'utiliser ! Je n'afficherai que du texte mais j'ai besoin d'y accéder !
Réponses
comme @Iria l'a suggéré, définissez d'abord une classe de modèle pour vos données
public class MyClass{
public string Value{get;set;}
public string Text{get;set}
}
puis dites à flurl de retourner une classe fortement typée au lieu d'utiliser dynamique
var data = await url.GetJsonAsync<List<MyClass>>();
alors vous pouvez lier votre sélecteur directement aux données
ShiftPicker.ItemsSource = data;
Je ferais la chose suivante :
var results = await url.GetJsonListAsync();
var myClass = JsonSerializer.Deserialize<IEnumerable<MyClass>>(results);
Puis
public class MyClass{
public string Value{get;set;}
public string Text{get;set}
}
dans myClass vous avez une collection d'objets qui ont une valeur et un texte, puis vous avez la correspondance entre la valeur et le texte pour chaque objet