{"id":22371338,"url":"https://github.com/kudrmichal/serializer","last_synced_at":"2025-07-30T20:32:03.351Z","repository":{"id":42985980,"uuid":"112846887","full_name":"KudrMichal/Serializer","owner":"KudrMichal","description":"PHP XML, Json serialization","archived":false,"fork":false,"pushed_at":"2023-03-07T11:24:56.000Z","size":114,"stargazers_count":2,"open_issues_count":6,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-03T12:55:31.357Z","etag":null,"topics":["json","mapper","object","php","php8","serialization","serializer","xml"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KudrMichal.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-12-02T14:06:19.000Z","updated_at":"2023-03-16T17:37:16.000Z","dependencies_parsed_at":"2022-08-21T14:50:56.815Z","dependency_job_id":null,"html_url":"https://github.com/KudrMichal/Serializer","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KudrMichal%2FSerializer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KudrMichal%2FSerializer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KudrMichal%2FSerializer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KudrMichal%2FSerializer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KudrMichal","download_url":"https://codeload.github.com/KudrMichal/Serializer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228183408,"owners_count":17881615,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["json","mapper","object","php","php8","serialization","serializer","xml"],"created_at":"2024-12-04T20:19:02.174Z","updated_at":"2024-12-04T20:19:03.306Z","avatar_url":"https://github.com/KudrMichal.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"Simple XML/JSON object mapper\n===========\n\nkudrmichal/serializer is a PHP object xml/json mapper for PHP 8.0+\n\n\nRequirements\n------------\n\nkudrmichal/serializer requires PHP 8.0 or higher.\n\nInstallation\n------------\n\nTo install the latest version of `kudrmichal/serializer` use [Composer](https://getcomposer.org).\n\n```\n$ composer require kudrmichal/serializer\n```\n\nJSON Usage\n------------\n\nLet's create two test classes\n\n```\nuse KudrMichal\\Serializer\\Json\\Metadata as JSON;\n\nclass Test\n{\n    public function __construct(\n        #[JSON\\Property(name:\"testInt\")] \n        private int $testInteger,\n        #[JSON\\Property] \n        private string $testString,\n        #[JSON\\Property]\n        private bool $testBoolean,\n        #[JSON\\PropertyArray]\n        private array $testArray,\t\t\n        #[JSON\\Property]\n        private TestObject $testObject,\n        #[JSON\\PropertyArray(type:TestObject::class)]\n        private array $testObjectsArray,\n    ) {}\n\n    //getters, setters, etc.\n}\n\n\nclass TestObject\n{\n    public function __construct(\n        #[JSON\\Property] private int $testObjectInt, \n        #[JSON\\Property] private string $testObjectString, \n        #[JSON\\Property] private bool $testObjectBoolean, \n        #[JSON\\PropertyArray] private array $testObjectArray\n    ) {}\n    \n    //getters, setters, etc.\n}\n\n```\n\nJSON string serializing to PHP object\n\n```\n\n$json = \u003c\u003c\u003cJSON\n{\n  \"testInt\": 10,\n  \"testString\": \"string test\",\n  \"testBoolean\": true,\n  \"testArray\": [1,2,3,4],\n  \"testObject\": {\n    \"testObjectInt\": 11,\n    \"testObjectString\": \"object string test\",\n    \"testObjectBoolean\": false,\n    \"testObjectArray\": [5,6,7,8]\n  },\n  \"testObjectsArray\": [\n    {\n      \"testObjectInt\": 12,\n      \"testObjectString\": \"array object string test\",\n      \"testObjectBoolean\": false,\n      \"testObjectArray\": [10,11,12]\n    },\n    {\n      \"testObjectInt\": 13,\n      \"testObjectString\": \"array object string test 2\",\n      \"testObjectBoolean\": true,\n      \"testObjectArray\": [13,14,15]\n    }\n  ]\n}\nJSON;\t\n\n$deserializer = new Deserializer();\n$test = $deserializer-\u003edeserialize(Test::class, $json);\n\n$test instanceof Test // true\n```\n\nPHP object serializing to JSON string\n\n```\n$object = new Test(\n    10,\n    'string test',\n    TRUE,\n    [1,2,3,4],\n    [4,3,2,1],\n    new TestObject(11, 'object string test', FALSE, [5,6,7,8]),\n    [\n        new TestObject(12, \"array object string test\", false, [10,11,12]),\n        new TestObject(13, \"array object string test 2\", true, [13,14,15]),\n    ],\n);\n\n$serializer = new \\KudrMichal\\Serializer\\Json\\Serializer();\n$json = $serializer-\u003eserialize($object);\n```\n\nXML Usage\n------------\n\nLet's create another two test classes\n\n```\nuse KudrMichal\\Serializer\\Unit\\Xml\\Classes\\TestObject;\nuse KudrMichal\\Serializer\\Xml\\Metadata as XML;\n\n#[XML\\Document(name:\"test\")]\nclass Test\n{\n    public function __construct(\n        #[XML\\Element(name:\"testInteger\")]\n        private int $testInt,\n        #[XML\\Attribute(name:\"testAttributeInt\")]\n        private int $testAttributeInteger,\n        #[XML\\Element]\n        private string $testString,\n        #[XML\\Element]\n        private bool $testBoolean,\n        #[XML\\Element(dateFormat: \"Y-m-d\")]\n        private \\DateTimeImmutable $testDate,\n        #[XML\\Elements(name: \"testArrayItem\", type: \"int\")]\n        private array $testArray,\n        #[XML\\ElementArray(type:\"int\", itemName: \"testNestedArrayItem\")]\n        private array $testNestedArray,\n        #[XML\\Element]\n        private TestObject $testObject,\n        #[XML\\ElementArray(type: TestObject::class, itemName: \"testObject\")]\n        private array $testObjectNestedArray\n    ) {}\n    \n    //getters, setters, etc.\n}\n\nclass TestObject\n{\n    public function __construct(\n        #[XML\\Element(name:\"testInteger\")]\n        private int $testObjectInt, \n        #[XML\\Attribute(name:\"testAttributeInt\", ignoreNull: true)]\n        private ?int $testObjectAttributeInt = NULL,\n        #[XML\\Element(ignoreNull: true)] \n        private ?string $testObjectString = NULL\n    ) {}\n\n    //getters, setters, etc.\n}\n```\n\nPHP object serializing to \\DOMDocument\n\n\n```\n$test = new Test(\n    321,\n    123,\n    '321',\n    true,\n    new \\DateTimeImmutable('2022-02-22'),\n    [1,2,3],\n    [3,2,1],\n    new \\KudrMichal\\Serializer\\Unit\\Xml\\Classes\\TestObject(9, 10, 'test'),\n    [\n        new \\KudrMichal\\Serializer\\Unit\\Xml\\Classes\\TestObject(5),\n        new \\KudrMichal\\Serializer\\Unit\\Xml\\Classes\\TestObject(6, testObjectString: 'true'),\n    ]\n);\n\n$serializer = new \\KudrMichal\\Serializer\\Xml\\Serializer();\n$doc = $serializer-\u003eserialize($test);\n```\n\nXML string serializing to PHP object\n\n```\n$xml = \u003c\u003c\u003cXML\n\u003ctest testAttributeInt=\"123\"\u003e\n    \u003ctestInteger\u003e321\u003c/testInteger\u003e\n    \u003ctestString\u003e321\u003c/testString\u003e\n    \u003ctestBoolean\u003e1\u003c/testBoolean\u003e\n    \u003ctestDate\u003e2022-02-22\u003c/testDate\u003e\n    \u003ctestArrayItem\u003e1\u003c/testArrayItem\u003e\n    \u003ctestArrayItem\u003e2\u003c/testArrayItem\u003e\n    \u003ctestArrayItem\u003e3\u003c/testArrayItem\u003e\n    \u003ctestNestedArray\u003e\n        \u003ctestNestedArrayItem\u003e3\u003c/testNestedArrayItem\u003e\n        \u003ctestNestedArrayItem\u003e2\u003c/testNestedArrayItem\u003e\n        \u003ctestNestedArrayItem\u003e1\u003c/testNestedArrayItem\u003e\n    \u003c/testNestedArray\u003e\n    \u003ctestObject testAttributeInt=\"10\"\u003e\n        \u003ctestInteger\u003e9\u003c/testInteger\u003e\n        \u003ctestObjectString\u003etest\u003c/testObjectString\u003e\n    \u003c/testObject\u003e\n    \u003ctestObjectNestedArray\u003e\n        \u003ctestObject\u003e\n            \u003ctestInteger\u003e5\u003c/testInteger\u003e\n        \u003c/testObject\u003e\n        \u003ctestObject\u003e\n            \u003ctestInteger\u003e6\u003c/testInteger\u003e\n            \u003ctestObjectString\u003etrue\u003c/testObjectString\u003e\n        \u003c/testObject\u003e\n    \u003c/testObjectNestedArray\u003e\n\u003c/test\u003e\nXML;\n\n$doc = new \\DOMDocument();\n$doc-\u003eloadXML($xml);\n\n$deserializer = new \\KudrMichal\\Serializer\\Xml\\Deserializer();\n$test = $deserializer-\u003edeserialize($doc, \\KudrMichal\\Serializer\\Tests\\Unit\\Xml\\Classes\\Test::class);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkudrmichal%2Fserializer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkudrmichal%2Fserializer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkudrmichal%2Fserializer/lists"}