Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/kudrmichal/serializer

PHP XML, Json serialization
https://github.com/kudrmichal/serializer

json mapper object php php8 serialization serializer xml

Last synced: 2 months ago
JSON representation

PHP XML, Json serialization

Awesome Lists containing this project

README

        

Simple XML/JSON object mapper
===========

kudrmichal/serializer is a PHP object xml/json mapper for PHP 8.0+

Requirements
------------

kudrmichal/serializer requires PHP 8.0 or higher.

Installation
------------

To install the latest version of `kudrmichal/serializer` use [Composer](https://getcomposer.org).

```
$ composer require kudrmichal/serializer
```

JSON Usage
------------

Let's create two test classes

```
use KudrMichal\Serializer\Json\Metadata as JSON;

class Test
{
public function __construct(
#[JSON\Property(name:"testInt")]
private int $testInteger,
#[JSON\Property]
private string $testString,
#[JSON\Property]
private bool $testBoolean,
#[JSON\PropertyArray]
private array $testArray,
#[JSON\Property]
private TestObject $testObject,
#[JSON\PropertyArray(type:TestObject::class)]
private array $testObjectsArray,
) {}

//getters, setters, etc.
}

class TestObject
{
public function __construct(
#[JSON\Property] private int $testObjectInt,
#[JSON\Property] private string $testObjectString,
#[JSON\Property] private bool $testObjectBoolean,
#[JSON\PropertyArray] private array $testObjectArray
) {}

//getters, setters, etc.
}

```

JSON string serializing to PHP object

```

$json = <<deserialize(Test::class, $json);

$test instanceof Test // true
```

PHP object serializing to JSON string

```
$object = new Test(
10,
'string test',
TRUE,
[1,2,3,4],
[4,3,2,1],
new TestObject(11, 'object string test', FALSE, [5,6,7,8]),
[
new TestObject(12, "array object string test", false, [10,11,12]),
new TestObject(13, "array object string test 2", true, [13,14,15]),
],
);

$serializer = new \KudrMichal\Serializer\Json\Serializer();
$json = $serializer->serialize($object);
```

XML Usage
------------

Let's create another two test classes

```
use KudrMichal\Serializer\Unit\Xml\Classes\TestObject;
use KudrMichal\Serializer\Xml\Metadata as XML;

#[XML\Document(name:"test")]
class Test
{
public function __construct(
#[XML\Element(name:"testInteger")]
private int $testInt,
#[XML\Attribute(name:"testAttributeInt")]
private int $testAttributeInteger,
#[XML\Element]
private string $testString,
#[XML\Element]
private bool $testBoolean,
#[XML\Element(dateFormat: "Y-m-d")]
private \DateTimeImmutable $testDate,
#[XML\Elements(name: "testArrayItem", type: "int")]
private array $testArray,
#[XML\ElementArray(type:"int", itemName: "testNestedArrayItem")]
private array $testNestedArray,
#[XML\Element]
private TestObject $testObject,
#[XML\ElementArray(type: TestObject::class, itemName: "testObject")]
private array $testObjectNestedArray
) {}

//getters, setters, etc.
}

class TestObject
{
public function __construct(
#[XML\Element(name:"testInteger")]
private int $testObjectInt,
#[XML\Attribute(name:"testAttributeInt", ignoreNull: true)]
private ?int $testObjectAttributeInt = NULL,
#[XML\Element(ignoreNull: true)]
private ?string $testObjectString = NULL
) {}

//getters, setters, etc.
}
```

PHP object serializing to \DOMDocument

```
$test = new Test(
321,
123,
'321',
true,
new \DateTimeImmutable('2022-02-22'),
[1,2,3],
[3,2,1],
new \KudrMichal\Serializer\Unit\Xml\Classes\TestObject(9, 10, 'test'),
[
new \KudrMichal\Serializer\Unit\Xml\Classes\TestObject(5),
new \KudrMichal\Serializer\Unit\Xml\Classes\TestObject(6, testObjectString: 'true'),
]
);

$serializer = new \KudrMichal\Serializer\Xml\Serializer();
$doc = $serializer->serialize($test);
```

XML string serializing to PHP object

```
$xml = <<
321
321
1
2022-02-22
1
2
3

3
2
1


9
test



5


6
true

XML;

$doc = new \DOMDocument();
$doc->loadXML($xml);

$deserializer = new \KudrMichal\Serializer\Xml\Deserializer();
$test = $deserializer->deserialize($doc, \KudrMichal\Serializer\Tests\Unit\Xml\Classes\Test::class);
```