JsonSerializerOptions.AllowOutOfOrderMetadataProperties Egenskap

Definition

Hämtar eller anger ett värde som anger om JSON-metadataegenskaper kan anges efter vanliga egenskaper i ett deserialiserat JSON-objekt.

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

Egenskapsvärde

true om JSON-metadataegenskaper, till exempel \$id och \$type, inte måste anges i början av det deserialiserade JSON-objektet. false om JSON-metadataegenskaper måste anges före vanliga egenskaper.

Undantag

Den här egenskapen anges när serialisering eller deserialisering har inträffat.

Kommentarer

Som standard System.Text.Json kräver att JSON-metadataegenskaper som $id, $typeoch $ref visas i början av ett JSON-objekt. Om du ställer in den här egenskapen för att true lätta på det kravet så att metadata kan visas efter vanliga egenskaper. Detta är användbart när du använder JSON från producenter som inte garanterar metadatabeställning.

Det finns dock prestandakonsekvenser när den här egenskapen är aktiverad:

  • Buffring: När den här egenskapen är aktiverad kan deserialiseraren inte längre bearbeta objektegenskaper i en enda vidarebefordran. Eftersom metadataegenskaper som visas senare i objektet (till exempel en $type diskriminerande) kan ändra hur alla tidigare egenskaper ska tolkas, måste deserialiseraren buffrar hela JSON-objektet i minnet innan det kan checka in på en deserialiseringsstrategi. I scenarier med strömmande deserialisering kan detta avsevärt öka minnesförbrukningen, särskilt för stora JSON-nyttolaster.
  • Backtracking: Med kapslade objekt är kostnaden för oordningsmetadata multiplicativ. Deserialiseraren kan behöva backa (dvs. läsa om och bearbeta tidigare buffrade data) en gång för varje nivå av kapslingsdjup i det inkommande objektdiagrammet. Det innebär att den värsta deserialiseringstiden är O(n × d), där n är längden på JSON-indata och d är djupet i objektdiagrammet.

Gäller för