Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menyesuaikan Kontrak Pensirian dalam System.Text.Json?

Bagaimanakah Saya Boleh Menyesuaikan Kontrak Pensirian dalam System.Text.Json?

Barbara Streisand
Lepaskan: 2025-01-03 11:45:40
asal
693 orang telah melayarinya

How Can I Customize Serialization Contracts in System.Text.Json?

Menyesuaikan Kontrak Pensirian dalam System.Text.Json

API System.Text.Json baharu menyediakan keupayaan untuk menyesuaikan kontrak bersiri, menawarkan fungsi yang serupa dengan Newtonsoft IContractResolver.

Penyesuaian Kontrak dalam .NET 7

Dalam .NET 7, penyesuaian kontrak tersedia melalui antara muka IJsonTypeInfoResolver. Antara muka ini membolehkan pembangun mencipta penyelesai tersuai yang mengembalikan contoh JsonTypeInfo yang dikonfigurasikan untuk jenis tertentu dan gabungan JsonSerializerOptions.

Mencipta Penyelesai Tersuai

Satu cara untuk mencipta penyelesai tersuai ialah untuk mensubkelaskan DefaultJsonTypeInfoResolver dan mengatasinya Kaedah GetTypeInfo(Type, JsonSerializerOptions). Sebagai alternatif, anda boleh menambah Action ke koleksi DefaultJsonTypeInfoResolver.Modifiers untuk mengubah suai JsonTypeInfo lalai selepas penciptaan.

Contoh: Selective Field Serialization

Untuk mereplikasi kefungsian kelas SelectiveSerializer. dalam System.Terializer Json, anda boleh menggunakan tindakan pengubah suai yang serupa dengan berikut:

resolver.Modifiers.Add(typeInfo =>
{
    if (typeInfo.Kind == JsonTypeInfoKind.Object)
    {
        foreach (var property in typeInfo.Properties)
        {
            if (property.GetMemberName() is {} name && !membersToSerializeSet.Contains(name))
                property.ShouldSerialize = static (obj, value) => false;
        }
    }
});
Salin selepas log masuk

Pengubah suai ini menyemak sifat yang sepadan dengan nama medan yang ditentukan dan menetapkan sifat ShouldSerialize mereka kepada palsu untuk mengecualikannya daripada bersiri.

Menetapkan Penyelesai

Setelah penyelesai tersuai dicipta, ia boleh ditetapkan melalui Harta JsonSerializerOptions.TypeInfoResolver. Contohnya:

var options = new JsonSerializerOptions
{
    TypeInfoResolver = new DefaultJsonTypeInfoResolver()
        .SerializeSelectedFields("FirstName,Email,Id"),
    // Other options as required
};
Salin selepas log masuk

Nota Tambahan

  • PropertyNamePolicy dan WriteIndented boleh ditetapkan untuk menyesuaikan penamaan dan lekukan harta benda.
  • JsonPropertyInfo. ShouldSerialize boleh digunakan untuk serialisasi bersyarat bagi sifat.
  • System.Text.Json adalah sensitif huruf besar-kecil secara lalai, jadi adalah penting untuk menggunakan perbandingan sensitif huruf besar-besaran apabila menapis medan yang dipilih.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyesuaikan Kontrak Pensirian dalam System.Text.Json?. 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