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.
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky
spatie/mailcoach-vapor
spatie/laravel-javascript-views