Сериализация / десериализация вложенных объектов в JSON с типом в PHP
У меня есть классы, которые расширяют абстрактный класс. Мне нужно создать экземпляры этих классов через строку-предпочтительно JSON.
Многие объекты являются вложенными, а многие свойства являются частными. Мне нужен способ:
- Создайте строку JSON полного объекта (с частными свойствами и вложенными объектами - с их частными свойствами).
- Создайте новый объект из строки JSON с правильным типом и всеми вложенными объектами.
Я думаю, что это нужно быть рекурсивным.
Я использую пространства имен, которые в конечном итоге выглядят как дерьмо, если я просто приведу объект к массиву.
Я подумываю о том, чтобы написать синтаксический анализатор, обозначить классы в моих строках JSON и затем жестко закодировать фабричную функцию для каждого класса, но это займет много времени.
3 ответов:
Я предлагаю вам использовать функцию php serialize
В таких случаях лучше использовать эту функцию, потому что она существует для этой цели: вы можете хранить сериализованную строку везде, где хотите, и после ее несериализации вы получите исходный объект PHP со всеми свойствами
С JSON, как вы сказали, Вы не будете иметь никакого представления о том, какого класса объект был (если только вы не сохраните его вручную в виде строки), и, конечно, будут все проблемы, связанные с частная собственность
Я предлагаю использовать сериализатор jms: http://jmsyst.com/libs/serializer Простой в использовании, настраиваемый и поддерживает все функции, которые вы запросили.
Для этого существует три метода: JSON, Serialize и var_export.
С JSON он будет работать только с объектами stdClass, но его легко читать и можно использовать вне PHP.
Serialize работает с экземплярами классов, отличных от stdClass, но он может быть труден для чтения и может использоваться только PHP. http://php.net/manual/en/function.serialize.php
Var_export выводит PHP-код для создания объекта (чтобы вы записали его в PHP-файл), это очень легко читается, но не может быть использован вне PHP. Объекты должны иметь метод set state. http://php.net/manual/en/function.var-export.php
Comments