> For the complete documentation index, see [llms.txt](https://bus.node-ts.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bus.node-ts.com/guide/serializers.md).

# Serializers

**@node-ts/bus-core** by default uses a naive serializer that leverages the built-in `JSON.parse()` and `JSON.stringify()` functions. This is used to convert messages to a serialized form when publishing them to the transport, and then deserializing them when they're read from the transport.

While this is fine for the simplest of cases, it suffers from the normal problems of deserializing into strong types.&#x20;

For example consider the following message

```typescript
import { Command } from '@node-ts/bus-messages'

export class RegisterUser extends Command {
  constructor (
    readonly dateOfBirth: Date
  ) {}
}
```

If this is run through the default serializer the effect will be the same as:

```typescript
const command = new RegisterUser(new Date())
const plainCommand = JSON.parse(JSON.stringify(command))
plainCommand.getDate() // ERROR - getDate() does not exist on plainCommand
```

The default serializer is not recommended for serious projects given these limitations, and [class serializer](/guide/serializers/class-serializer.md) should be used where possible.
