Серіалізація у BSON

Масиви

Якщо масив є упакованим масивом - тобто порожній масив або якщо ключі починаються з 0 і є послідовними без пробілів: масив BSON

Якщо масив не упакований - тобто має асоціативні (рядкові) ключі, ключі не починаються з 0 або за наявності прогалин: об'єкт BSON

Документ верхнього рівня (кореневий), завждисериализуется, как документ BSON.

Приклади

Серіалізація як масив BSON:

[ ] => [ ][ 0 => 4, 1 => 9 ] => [ ]

Серіалізація як документ BSON:

[ 0 => 1, 2 => 8, 3 => 12 ] => { "0" : 1, "2" : 8, "3" : 12 } [ "foo" => 42 ] => { "foo" : 42 } [ 1 => 9, 0 => 10 ] => { "1" : 9, "0" : 10 }

Зверніть увагу, що п'ять прикладів є витримками з повного документа і подають тільки однезначение внутри документа.

. Объекты

Якщо об'єкт належить до класу stdClass, сериализуйте, какдокумент BSON

Якщо об'єкт є підтримуваним класом, який реалізує MongoDB\BSON\TypeВикористовуйте логіку серіалізації BSON для цього конкретного типу. Примірники MongoDB\BSON\Type (виключаючи MongoDB\BSON\Serializable можна серіалізувати лише як значення поля документа. Спроба серіалізації такого об'єкта як кореневий документ призведе до викиду MongoDB\Driver\Exception\UnexpectedValueException

Якщо об'єкт невідомого класу реалізує інтерфейс MongoDB\BSON\Type, Видається виняток MongoDB\Driver\Exception\UnexpectedValueException

Якщо об'єкт відноситься до будь-якого іншого класу, без реалізації будь-якого спеціального інтерфейсу, серіалізуйте, як документ BSONОставляйте толькоpublic властивості та ігноруйте protectedиprivateсвойства.

Якщо об'єкт належить до класу, який реалізує інтерфейс MongoDB\BSON\Serializable, викличте MongoDB\BSON\Serializable::bsonSerialize() і використовуйте повернутий масив або stdClass для серіалізації як документ BSON або масиву. Тип BSON визначатиметься таким:

  1. Кореневі документи мають бути серіалізовані як документ BSON.

  2. MongoDB\BSON\Persistableоб'єкти повинні бути серіалізовані як документ BSON.

  3. Якщо MongoDB\BSON\Serializable::bsonSerialize()повертає упакований масив, серіалізуйте його як масив BSON.

  4. Якщо MongoDB\BSON\Serializable::bsonSerialize()повертає невпакований масив абоstdClass, серіалізуйте як документ BSON.

  5. Якщо MongoDB\BSON\Serializable::bsonSerialize()не повернув масив абоstdClass, видасть винятокMongoDB\Driver\Exception\UnexpectedValueException

Якщо об'єкт належить до класу, який реалізує інтерфейс MongoDB\BSON\Persistable (що має на увазі MongoDB\BSON\Serializable), отримайте властивості аналогічно попереднім абзацям, але такождобавьте дополнительное свойство__pclass як Binary значення з підтипом 0x80 та даними, що містять повне ім'я класу об'єкта, що серіалізується.

Свойство__pclass додається в масив або об'єкт, що повертається MongoDB\BSON\Serializable::bsonSerialize(), що означає, що воно буде перезаписувати будь-який ключ/властивість __pclass у значенні, що повертається MongoDB\BSON\Serializable::bsonSerialize(). Якщо ви хочете уникнути такої поведінки та встановити власне значення __pclass, ви не повинні реалізовувати MongoDB\BSON\Persistable і натомість повинні реалізовувати MongoDB\BSON\Serializableнапрямую.

Приклади

Loading...