Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Serializer Laravel Package

jms/serializer

Serialize and deserialize complex PHP object graphs to JSON or XML with flexible metadata (annotations, YAML, XML). Handles circular references, exclusion strategies, versioning, dates/intervals, and integrates with Doctrine ORM—ideal for APIs and data interchange.

View on GitHub
Deep Wiki
Context7

Library for (de-)serializing data of any complexity (supports JSON, and XML)

Frequently asked questions about Serializer
How do I integrate jms/serializer into a Laravel project for API responses?
Install via Composer (`composer require jms/serializer`), then configure mappings (annotations, XML, or YAML). Use the `Serializer` class to convert Eloquent models to JSON/XML with `@Groups` for granular control. Replace `Response::json()` with `Serializer::serialize()` for consistent payloads.
Does jms/serializer support Laravel’s Eloquent models out of the box?
Yes, via Doctrine ORM integration. Add `@Groups({"api"})` annotations to model properties, then serialize entities directly. For PHP 8+, use native attributes; older versions require annotation drivers like `jms/serializer-bundle`.
What’s the best way to handle circular references in Laravel collections?
jms/serializer automatically detects and handles circular references (e.g., parent-child relationships in Eloquent). No extra configuration is needed—it gracefully skips or flattens cycles by default. For custom logic, use `@MaxDepth` or `@Exclude` annotations.
Can I use jms/serializer with Laravel’s native JSON encoding (json_encode) for performance?
For simple cases, `json_encode` is faster, but jms/serializer excels with complex objects (dates, nested structures, versioning). Benchmark both: test serialization of 1,000 nested Eloquent models. If performance is critical, cache metadata with `AnnotationRegistry`.
How do I configure serialization groups (e.g., admin vs. public APIs) in Laravel?
Use `@Groups({"admin", "public"})` annotations on model properties. During serialization, pass the group name: `$serializer->serialize($model, 'json', ['groups' => ['public']])`. This lets you dynamically exclude sensitive fields.
What are the breaking changes when upgrading from jms/serializer v2.x to v3.x?
Key changes include annotation driver renaming (e.g., `metadata.driver` now uses `metadata.directory` for PHP 8+ attributes) and Doctrine proxy handling. Review the [UPGRADING guide](https://github.com/schmittjoh/serializer/blob/master/UPGRADING.md) for custom type handlers and metadata caching.
Is jms/serializer compatible with Laravel’s Symfony components (e.g., HttpFoundation)?
Yes, it integrates seamlessly with Symfony’s `HttpFoundation` (e.g., `Response` objects) and `Validator`. Use the `Serializer` to transform validated data into API responses or XML feeds. No additional Laravel-specific conflicts exist in v3.x.
How do I handle custom PHP types (e.g., Carbon instances, UUIDs) in serialized output?
Register custom handlers via `metadata.factory` or use `@Type` annotations. For Carbon dates, enable the built-in `DateTimeHandler`. For UUIDs, create a custom handler extending `MetadataAwareHandlerInterface` and bind it in the serializer’s configuration.
What’s the memory impact of serializing large Eloquent collections with circular references?
Circular references increase memory usage due to reflection and object traversal. Monitor with `memory_get_usage()` and optimize by limiting depth (`@MaxDepth`) or excluding cycles (`@Exclude`). For production, cache metadata to reduce runtime overhead.
Are there alternatives to jms/serializer for Laravel JSON/XML serialization?
For JSON, consider `league/fractal` (API-focused) or `spatie/array-to-xml` (simpler XML). For Doctrine integration, `api-platform/core` is another option. jms/serializer stands out for handling complex graphs, versioning, and annotation-driven flexibility—ideal for evolving APIs.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core
yusufgenc/filament-api-forge
l3aro/rating-star-for-filament
leek/filament-subtenant-scope