Saya mencoba mengurai string JSON, masalahnya adalah API akan mengembalikan string kosong yang berbentuk pada tipe data Linq.JValue dan di lain waktu itu akan mengembalikan anak dengan tipe Linq.JObject. Saya ingin menangani kedua tanggapan secara dinamis, saya berjuang untuk membedakan keduanya.

Contoh tanggapan -

"ITEMIZEDCHARGES": {
      "ITEM": [
        {
          "@TYPE": "CHARGE",
          "@FOR": "FREIGHT",
          "@AMOUNT": "627.28",
          "@DESCRIPTION": "400 LB CL50, 3 PLT @ 48 x 48 x 48 IN"
        },
        {
          "@TYPE": "CHARGE",
          "@FOR": "FSC",
          "@AMOUNT": "161.84",
          "@DESCRIPTION": "/ FUEL SURCHARGE",
          "@RATE": "25.8%"
        }
      ]
    },
    

   Or 

"ITEMIZEDCHARGES" : ""

IMG : https://imgur.com/a/zBqGN7F

-1
Mihir 25 Mei 2021, 21:15

1 menjawab

Jawaban Terbaik

Anda dapat memeriksa jenis nilai untuk ITEMIZEDCHARGES kemudian sesuai dengan yang Anda harapkan dengan menggunakan GetType() pada nilainya dan membandingkannya dengan typeof(JObject) atau typeof(JValue).

public class Item
{
    [JsonProperty("@TYPE")]
    public string Type { get; set; }
    [JsonProperty("@FOR")]
    public string For { get; set; }
    // ....
}

var jObj = JObject.Parse(jsonString);

List<Item> yourObject = null;
if (jObj["ITEMIZEDCHARGES"].GetType().Equals(typeof(JObject)))
{
    Console.WriteLine("Its a JObject");
    yourObject = jObj["ITEMIZEDCHARGES"]["ITEM"].ToObject<List<Item>>();
}

else if (jObj["ITEMIZEDCHARGES"].GetType().Equals(typeof(JValue)))
    Console.WriteLine("Its a String value");

Anda perlu melakukan pemeriksaan lain untuk memastikan kunci ada di objek Anda.

0
Jawad 25 Mei 2021, 18:40