JsonSerializerOptions.AllowOutOfOrderMetadataProperties Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Recebe ou define um valor que indica se propriedades de metadados JSON podem ser especificadas após propriedades normais num objeto JSON desserializado.
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
Valor de Propriedade
true se propriedades de metadados JSON, como \$id e \$type, não forem necessárias especificadas logo no início do objeto JSON desserializado; false se as propriedades dos metadados JSON devem ser especificadas antes das propriedades normais.
Exceções
Esta propriedade é definida após ocorrer a serialização ou desserialização.
Observações
Por defeito, System.Text.Json requer que propriedades dos metadados JSON como $id, $type, e $ref apareçam logo no início de um objeto JSON. Definir esta propriedade relaxa true esse requisito, permitindo que os metadados apareçam depois das propriedades normais. Isto é útil ao consumir JSON de produtores que não garantem a ordem dos metadados.
No entanto, existem implicações de desempenho quando esta propriedade está ativada:
-
Buffering: Quando esta propriedade está ativada, o desserializador já não pode processar as propriedades do objeto numa única passagem direta. Como propriedades de metadados que aparecem mais tarde no objeto (por exemplo, um
$typediscriminador) podem alterar a forma como todas as propriedades anteriores devem ser interpretadas, o desserializador deve armazenar todo o objeto JSON em memória antes de poder comprometer-se com uma estratégia de desserialização. Em cenários de desserialização em streaming, isto pode aumentar significativamente o consumo de memória, especialmente para grandes cargas úteis JSON. - Retrocesso: Com objetos aninhados, o custo dos metadados fora de ordem é multiplicativo. O desserializador pode precisar de recuar (ou seja, reler e reprocessar dados previamente armazenados em buffer) uma vez para cada nível de profundidade de aninhamento no grafo de objeto recebido. Isto significa que o tempo de desserialização no pior caso é O(n × d), onde n é o comprimento da entrada JSON e d é a profundidade do grafo objeto.