Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Библиотека System.Text.Json по умолчанию подчеркивает литерал, детерминированное поведение и избегает каких-либо предположений или интерпретаций от имени вызывающего объекта. Библиотека намеренно разработана таким образом, чтобы обеспечить безопасность и производительность. Хотя System.Text.Json обладает высокой настраиваемостью, и его функции можно использовать для минимизации изменений, необходимых для сериализованных типов, важно учитывать компромиссы между обработкой существующих типов с минимальными изменениями и рефакторингом типов для обеспечения идиоматической и безопасной сериализации.
При миграции из BinaryFormatterSystem.Text.Jsonнего важно отметить следующие действия и параметры:
По умолчанию поля не сериализуются или десериализируются по
System.Text.Json, но их можно аннотировать для сериализации. Кроме того,JsonSerializerOptions.IncludeFieldsможно осторожно задать дляtrueвключения всех общедоступных полей для сериализованных типов.JsonSerializerOptions options = new() { IncludeFields = true };По умолчанию System.Text.Jsonигнорирует частные поля и свойства. Вы можете включить использование недоступного доступа к свойству с помощью атрибута
[JsonInclude]. В том числе частные поля требуют некоторых нетривиальных дополнительных работ.System.Text.Json не может десериализировать поля или свойства только для чтения, но
[JsonConstructor]атрибут можно использовать для указания того, что указанный конструктор должен использоваться для создания экземпляров типа при десериализации. Конструктор может задать поля и свойства только для чтения.Чтобы переопределить поведение сериализации по умолчанию для определенного типа, можно написать пользовательские преобразователи.
Она поддерживает сериализацию и десериализацию многих коллекций, но существуют ограничения. Дополнительные сведения о типах и коллекциях, поддерживаемых для сериализации и десериализации, см. в документации по поддерживаемым
типам и коллекциям. При определенных условияхона поддерживает сериализацию и десериализацию пользовательских обобщенных коллекций.
Другие типы без встроенной поддержки:
DataSet,DataTable,DBNull,TimeZoneInfo,Type.ValueTupleОднако можно написать пользовательский преобразователь для поддержки этих типов.Она поддерживает сериализацию и десериализацию иерархии полиморфных типов, где типы были явно выбраны с помощью атрибута
[JsonDerivedType]или пользовательского преобразователя. Открытые иерархии наследования не поддерживаются, а циклический обход с полиморфизмом требует дискриминационных идентификаторов типов для всех известных производных типов.Атрибут
[JsonIgnore]для свойства приводит к тому, что свойство будет опущено из JSON во время сериализации.Для сохранения ссылок и обработки циклических ссылок
System.Text.Jsonзадайте для свойстваJsonSerializerOptions.ReferenceHandlerзначениеReferenceHandler.Preserve.Serialization можно значительно настроить с помощью пользовательских контрактов, разблокировав множество сценариев, свести к минимуму изменения сериализованных типов.