JsonSerializerOptions.AllowOutOfOrderMetadataProperties Properti

Definisi

Mendapatkan atau menetapkan nilai yang menunjukkan apakah properti metadata JSON dapat ditentukan setelah properti reguler dalam objek JSON yang dideserialisasi.

public:
 property bool AllowOutOfOrderMetadataProperties { bool get(); void set(bool value); };
public bool AllowOutOfOrderMetadataProperties { get; set; }
member this.AllowOutOfOrderMetadataProperties : bool with get, set
Public Property AllowOutOfOrderMetadataProperties As Boolean

Nilai Properti

true jika properti metadata JSON, seperti \$id dan \$type, tidak diperlukan untuk ditentukan pada awal objek JSON yang dideserialisasi; false jika properti metadata JSON harus ditentukan sebelum properti reguler.

Pengecualian

Properti ini diatur setelah serialisasi atau deserialisasi terjadi.

Keterangan

Secara default, System.Text.Json mengharuskan properti metadata JSON seperti $id, $type, dan $ref muncul di awal objek JSON. Mengatur properti ini untuk true melonggarkan persyaratan tersebut, memungkinkan metadata muncul setelah properti reguler. Ini berguna saat mengkonsumsi JSON dari produsen yang tidak menjamin pemesanan metadata.

Namun, ada implikasi performa ketika properti ini diaktifkan:

  • Buffering: Ketika properti ini diaktifkan, deserializer tidak dapat lagi memproses properti objek dalam satu pass maju. Karena properti metadata muncul nanti di objek (misalnya, $type diskriminator) dapat mengubah bagaimana semua properti sebelumnya harus ditafsirkan, deserializer harus menyangga seluruh objek JSON dalam memori sebelum dapat berkomitmen pada strategi deserialisasi. Dalam skenario deserialisasi streaming, ini dapat secara signifikan meningkatkan konsumsi memori, terutama untuk payload JSON besar.
  • Backtracking: Dengan objek berlapis, biaya metadata yang tidak berurutan bersifat multiplikatif. Deserializer mungkin perlu backtrack (yaitu, dibaca ulang dan pemrosesan ulang data yang sebelumnya di-buffer) sekali untuk setiap tingkat kedalaman bersarang dalam grafik objek masuk. Ini berarti waktu deserialisasi kasus terburuk adalah O(n × d), di mana n adalah panjang input JSON dan d adalah kedalaman grafik objek.

Berlaku untuk