Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menyahseri JSON dengan Tatasusunan dan Objek Pilihan dalam JSON.NET?

Bagaimana untuk Menyahseri JSON dengan Tatasusunan dan Objek Pilihan dalam JSON.NET?

Patricia Arquette
Lepaskan: 2025-01-12 19:07:44
asal
279 orang telah melayarinya

How to Deserialize JSON with Optional Arrays and Objects in JSON.NET?

Mengendalikan penyahserikatan tatasusunan dan objek pilihan dalam JSON.NET

Apabila menggunakan perpustakaan JSON.NET untuk memproses data yang dikembalikan oleh Facebook, anda mungkin mengalami perubahan dalam struktur JSON. Sesetengah sifat kadangkala diwakili sebagai tatasusunan dan kadangkala sebagai objek. Ini boleh menyebabkan isu penyahserikatan.

Soalan

Sesetengah siaran Facebook mungkin mengembalikan JSON dalam format berikut, yang menyebabkan penyahserikatan gagal:

<code class="language-json">"attachment": {
    "media":{},
    "name":"",
    "caption":"",
    "description":"",
    "properties":{},
    "icon":"http://www.facebook.com/images/icons/mobile_app.gif",
    "fb_object_type":""
},
"permalink":"http://www.facebook.com/1234"</code>
Salin selepas log masuk

Penyelesaian

Untuk menyelesaikan masalah ini, anda boleh menggunakan kelas JsonConverter untuk melaksanakan penukar JSON tersuai. Penukar ini akan mengendalikan tatasusunan dan struktur objek bagi sifat tertentu.

Penukar JSON tersuai

Penukar tersuai berikut SingleValueArrayConverter menukar satu objek kepada senarai, membenarkan sifat dinyahsiri dengan betul:

<code class="language-csharp">public class SingleValueArrayConverter<T> : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        object retVal;
        if (reader.TokenType == JsonToken.StartObject)
        {
            T instance = (T)serializer.Deserialize(reader, typeof(T));
            retVal = new List<T>() { instance };
        }
        else if (reader.TokenType == JsonToken.StartArray)
        {
            retVal = serializer.Deserialize(reader, objectType);
        }
        else
        {
            retVal = null; // 处理其他情况,例如空值
        }
        return retVal;
    }

    public override bool CanConvert(Type objectType)
    {
        return true;
    }
}</code>
Salin selepas log masuk

Penggunaan

Untuk menggunakan penukar tersuai, anotasi sifat dalam kelas sasaran dengan atribut JsonConverter:

<code class="language-csharp">[JsonConverter(typeof(SingleValueArrayConverter<OrderItem>))]
public List<OrderItem> Items { get; set; }</code>
Salin selepas log masuk

Ini akan membolehkan JSON.NET mengendalikan tatasusunan dan struktur objek bagi sifat Items, sekali gus menyelesaikan isu penyahserialisasian. Perhatikan penambahan get; set; dan pengendalian else kes untuk menjadikannya lebih mantap.

Atas ialah kandungan terperinci Bagaimana untuk Menyahseri JSON dengan Tatasusunan dan Objek Pilihan dalam JSON.NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan