การฟิลเตอร์ key จาก FireBase response

สวัสดีปีใหม่ 2020 ทุกท่านครับ

ผมทดสอบการทำงานของโค๊ด
1. ก็อปโค๊ดมาแปะ โดยวางไว้ที่ CodeFile1.cs (ตามรูป)
2.สร้าง form ใหม่ เพื่อไม่ให้ไปตีกับโค๊ดเดิม (สร้างฟอร์มเปล่าๆ)
3. ปรับโปรแกรม เพื่อ run ตัวใหม่ที่พึ่งจะวางลง ในคอนเซ็ปคิดว่าใกล้กับสิ่งที่ต้องการ เพื่อค้นหาคีย์เวิรด์บางคำใน <keys> ส่วนเวลาแสดงผล ผมต้องตัดตอนเอาเฉพาะ คีย์และ value ที่ เป็น child จากตัวที่พบข้อมูล
ref json จากกระทู้เก่า  https://ppantip.com/topic/39490843/comment12-1  และ https://pastebin.com/biDFeGZb
ขยายความ เช่น ถ้าเจอ คีย์ "อุปกรณ์" AND "ขอซื้อ" (อาจจะมีคำว่า อุปกรณ์ หลาย กรณี เช่น นโยบาย อุปกรณ์, การรับรู้มูลค่าอุปกรณ์ชิ้นเล็ก, ทำลายอุปกรณ์ที่เลิกใช้งาน ก็จะฟิลเตอร์เหลือตัวที่เกี่ยวข้อง สองตัว แบบนี้ โดย ผมจะลองทำตาม c# code ด้านล่าง
JObject : 

{{
  "งานด้านปฏิบัติการ": {
    "Task": {
      "2_1งานลงทุนด้านอุปกรณ์": {
        "2_1_1การเลือกและขอซื้ออุปกรณ์ร้านมาตรฐาน": {
          "ร้านเปิดใหม่": {
            "อนุมัติ": {
              "POST": "MD"
            }
          }
        },
        "2_1_2การเลือกและขอซื้ออุปกรณ์ร้านนอกมาตรฐาน": {
          "กลั่นกรอง": {
              "POST": "MD",
              "สายงาน": "สายงานการตลาด"
          },
          "อนุมัติ": {
            "POST": "MD"
          }
        }
      }
    }
  },
เพื่อสร้างลิสต์เก็บค่า Property name เพื่อจะมาค้นหาคีย์ แต่ด้านล่างเป็นการ ดึงค่าคีย์แต่ละระดับ ขึ้นมา เป็นลิสต์ กะว่า จะใช้ debug เพื่อดูค่าที่เก็บไว้ก่อนทำการ find() อีกที(ตามหนังสือที่หามาอ่านครับ) โดยเช็ค type ว่า ถ้าไม่ใช่ string ก็ย่อยลงไปอีกระดับนึง จนกว่า จะเจอระดับสุดท้าย ของแต่ละอัน 
c# : 
  private void AddValtoList(JObject o)
        {
            List<string> l1 = o.Properties().Select(p => p.Name).ToList();
            foreach (string n1 in l1)
            {
                //List<string> l3 = ((JObject)o[n1]["Task"]).Properties().Select(p => p.Name).ToList();
                foreach (JProperty n3 in o[n1]["Task"])
                {
                    foreach (JProperty n4 in o[n1]["Task"][n3.Name])
                    {
                        foreach (JProperty n5 in o[n1]["Task"][n3.Name][n4.Name])
                        {
                            if (n5.Value.Type.ToString() != "String")
                            {
                                foreach (JProperty n6 in o[n1]["Task"][n3.Name][n4.Name][n5.Name])
                                {
                                    if (n6.Value.Type.ToString() != "String")
                                    {
                                        foreach (JProperty n7 in o[n1]["Task"][n3.Name][n4.Name][n5.Name][n6.Name])
                                        {
                                            AddVal(n7.Name, (string)n7.Value, n7.Path);
                                        }
                                    }
                                    else
                                    {
                                        AddVal(n6.Name, (string)n6.Value, n6.Path);
                                    }
                                }
                            }
                            else
                            {
                                AddVal(n5.Name, (string)n5.Value, n5.Path);
                            }
                        }
                    }
                }
 
            }
        }
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่