Apabila membangunkan penukar JSON tersuai untuk System.Text.Json, anda mungkin menghadapi situasi di mana siri lalai dalam kaedah Write
adalah mencukupi. Untuk mencapai matlamat ini, beberapa pendekatan boleh dipertimbangkan.
Jika atribut [JsonConverter]
digunakan pada sifat tertentu, memanggil JsonSerializer.Serialize(writer, person, options);
akan menjana siri lalai untuk sifat itu.
Dalam kaedah Write
penukar tersuai, anda boleh membuat salinan yang diluluskan dalam JsonSerializerOptions
, alih keluar penukar tersuai daripada senarai Converters
salinan dan hantar pilihan yang diubah suai kepada JsonSerializer.Serialize<T>(Utf8JsonWriter, T, JsonSerializerOptions);
Sederhana. Ambil perhatian bahawa pendekatan ini mempunyai had apabila bekerja dengan jenis rekursif.
Anda boleh mengawal penciptaan penukar tersuai dengan mentakrifkan JsonConverterFactory
sebagai kelas asas untuk penukar tersuai. Dalam kaedah CreateConverter
kilang, anda boleh membuat DefaultConverter
bersarang yang menggunakan pilihan yang diubah suai untuk penyirian dan penyahserikatan.
Nota: Kaedah ini mungkin menyebabkan limpahan tindanan.
Jika JsonConverterFactory
digunakan pada jenis nilai tersuai atau POCO, limpahan tindanan mungkin berlaku semasa penyirian.
Ubah suai berikut PersonConverter
menunjukkan cara melaksanakan pesirilan lalai menggunakan kilang penukar tersuai:
public sealed class PersonConverter : DefaultConverterFactory<Person> { ... // 使用修改后的选项实现Read和Write方法 public override bool CanConvert(Type typeToConvert) => typeof(Person) == typeToConvert; public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) => new DefaultConverter(options, this); }
Dalam kelas asas DefaultConverterFactory
, kaedah sambungan CopyAndRemoveConverter
digunakan untuk membuat salinan pilihan yang diubah suai, tidak termasuk penukar tersuai.
Kaedah ini memberikan fleksibiliti yang lebih besar daripada menggunakan JsonSerializerOptions
yang berbeza untuk bersiri dan penyahserikan.
Atas ialah kandungan terperinci Bagaimana untuk Memanfaatkan Pensirilan System.Text.Json Lalai dalam Penukar JSON Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!