Formatters¶
Formatters are responsible for converting CLR objects to broker payloads and converting broker payloads back to CLR objects.
ServiceBus.Core keeps formatting separate from transport logic.
graph LR
Object["CLR object"]
Formatter["IDataFormatter"]
Payload["byte[] payload"]
Broker["Message broker"]
Object --> Formatter
Formatter --> Payload
Payload --> Broker
Formatter Model¶
IDataFormatter works with the final binary payload used by the broker.
The general flow is:
graph LR
Object["CLR object"]
Json["JSON"]
Encoding["Encoding"]
Payload["byte[]"]
Object --> Json
Json --> Encoding
Encoding --> Payload
The reverse flow is:
graph LR
Payload["byte[]"]
Encoding["Encoding"]
Json["JSON"]
Object["CLR object"]
Payload --> Encoding
Encoding --> Json
Json --> Object
IDataFormatter vs IJsonSerializer¶
The formatter layer exposes two related but different abstractions.
| Contract | Responsibility |
|---|---|
IDataFormatter |
Converts CLR objects to byte[] payloads and back. |
IJsonSerializer |
Converts CLR objects to JSON strings and back. |
IDataFormatter is used by broker clients.
IJsonSerializer is used internally by formatter implementations when a string-based JSON serializer is needed.
Available Implementations¶
| Package | Formatter |
|---|---|
ServiceBus.Formatters.Ms |
MsJsonDataFormatter |
ServiceBus.Formatters.Newtonsoft |
JsonDataFormatter |
ServiceBus.Formatters.Newtonsoft |
RwJsonDataFormatter |
Serializer Implementations¶
| Package | Serializer |
|---|---|
ServiceBus.Formatters.Ms |
MsJsonSerializer |
ServiceBus.Formatters.Newtonsoft |
JsonNetSerializer |
Relationship With Clients¶
graph TD
Publisher --> IDataFormatter
Subscriber --> IDataFormatter
IAsyncRestPublisher --> IDataFormatter
IRestHostSubscriber --> IDataFormatter
Every client that sends or receives payloads requires an IDataFormatter.
Recommendation¶
Use one formatter implementation consistently across publishers and subscribers that exchange the same message contracts.
Both sides must agree on the payload format.