Серіалізація у 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 визначатиметься таким:
-
Кореневі документи мають бути серіалізовані як документ BSON.
-
MongoDB\BSON\Persistableоб'єкти повинні бути серіалізовані як документ BSON.
-
Якщо MongoDB\BSON\Serializable::bsonSerialize()повертає упакований масив, серіалізуйте його як масив BSON.
-
Якщо MongoDB\BSON\Serializable::bsonSerialize()повертає невпакований масив абоstdClass, серіалізуйте як документ BSON.
-
Якщо 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...