Сериализация / десериализация вложенных объектов в JSON с типом в PHP



У меня есть классы, которые расширяют абстрактный класс. Мне нужно создать экземпляры этих классов через строку-предпочтительно JSON.



Многие объекты являются вложенными, а многие свойства являются частными. Мне нужен способ:




  1. Создайте строку JSON полного объекта (с частными свойствами и вложенными объектами - с их частными свойствами).

  2. Создайте новый объект из строки JSON с правильным типом и всеми вложенными объектами.


Я думаю, что это нужно быть рекурсивным.



Я использую пространства имен, которые в конечном итоге выглядят как дерьмо, если я просто приведу объект к массиву.



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

569   3  

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

    Ничего не найдено.