รับเมธอด Api flurl.http ที่ใช้

Aug 23 2020

ฉันกำลังเรียก APi โดยใช้ Flurl.http ที่มีฟิลด์ค่าและข้อความ ฉันใช้ api นั้นใน 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;

        }

นี่คือ json response api ให้

{"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)"}]

ฉันได้รับข้อมูลอย่างถูกต้องและฉันสามารถดึงรายการที่เลือกได้เช่นกัน แต่ปัญหาคือฉันได้เพิ่มเฉพาะฟิลด์ข้อความ แต่ฉันต้องการเข้าถึงฟิลด์ค่าด้วยเช่นกัน!

ตอนนี้เมื่อฉันต้องส่งค่าแบบเลื่อนลงที่เลือกฉันมีเพียงข้อความและฉันต้องการฟิลด์ค่าที่เกี่ยวข้องด้วยเพื่อที่ฉันจะได้ใช้มัน! ฉันจะแสดงเฉพาะข้อความ แต่ฉันต้องการเข้าถึงมัน!

คำตอบ

1 Jason Aug 23 2020 at 05:31

ตามที่ @Iria แนะนำให้กำหนดคลาสโมเดลสำหรับข้อมูลของคุณก่อน

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

จากนั้นบอกให้ flurl ส่งคืนคลาสที่พิมพ์มากแทนที่จะใช้ไดนามิก

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

จากนั้นคุณสามารถผูกเครื่องมือเลือกของคุณกับข้อมูลได้โดยตรง

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

ฉันจะทำสิ่งต่อไปนี้:

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

แล้ว

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

ใน myClass คุณมีคอลเลกชันของวัตถุที่มีค่าและข้อความจากนั้นคุณจะมีความสอดคล้องระหว่างค่าและข้อความสำหรับแต่ละวัตถุ