JsonSerializerOptions.AllowOutOfOrderMetadataProperties Свойство

Определение

Возвращает или задает значение, указывающее, можно ли указывать свойства метаданных JSON после регулярных свойств в десериализированном объекте JSON.

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

Значение свойства

true Если свойства метаданных JSON, такие как \$id и \$type, не должны быть указаны в самом начале десериализированного объекта JSON; false Значение , если свойства метаданных JSON должны быть указаны перед регулярными свойствами.

Исключения

Это свойство устанавливается после сериализации или десериализации.

Комментарии

По умолчанию требуется, System.Text.Json чтобы свойства метаданных JSON, такие как $id, $typeи $ref отображались в самом начале объекта JSON. Установка этого свойства для true расслабления этого требования, что позволяет метаданным отображаться после регулярных свойств. Это полезно при использовании JSON от производителей, которые не гарантируют порядок метаданных.

Однако при включении этого свойства существуют последствия для производительности.

  • Буферизация: если это свойство включено, десериализатор больше не может обрабатывать свойства объектов в одном переадресации вперед. Так как свойства метаданных, отображаемые позже в объекте (например, $type дискриминация), могут изменить способ интерпретации всех предыдущих свойств, десериализатор должен буферизуть весь объект JSON в памяти, прежде чем он сможет зафиксировать стратегию десериализации. В сценариях десериализации потоковой передачи это может значительно увеличить потребление памяти, особенно для больших полезных данных JSON.
  • Обратная дорожка. При использовании вложенных объектов стоимость метаданных вне порядка умножается. Десериализатор может потребоваться выполнить обратную дорожку (т. е. перечитать и повторно обработать ранее буферированные данные) для каждого уровня вложенной глубины входящего графа объектов. Это означает, что наихудшее время десериализации — O(n × d), где n — длина входных данных JSON и d — глубина графа объектов.

Применяется к