# 序列化 CAP 提供了 `ISerializer` 接口来支持对消息进行序列化,默认情况下我们使用 json 来对消息进行序列化处理并存储到数据库中。 ## 自定义序列化 ```C# public class YourSerializer: ISerializer { Task SerializeAsync(Message message) { } Task DeserializeAsync(TransportMessage transportMessage, Type valueType) { } } ``` 然后将你的实现注册到容器中: ``` //注册你的自定义实现 services.AddSingleton(); // --- services.AddCap ``` ## 消息适配器 (v3.0移除 ) 在异构系统中,有时候需要和其他系统进行通讯,但是其他系统使用的消息对象可能和 CAP 的[**包装器对象**](../storage/general.md#_7)不一样,这个时候就需要对消息进行自定义适配。 CAP 提供了 `IMessagePacker` 接口用于对 [**包装器对象**](../storage/general.md#_7) 进行自定义,自定义的 MessagePacker 通常是将 `CapMessage` 进行打包和解包操作,在这个过程中可以添加自己的业务对象。 使用方法: ```csharp class MyMessagePacker : IMessagePacker { private readonly IContentSerializer _serializer; public DefaultMessagePacker(IContentSerializer serializer) { _serializer = serializer; } public string Pack(CapMessage obj) { var myStructure = new { Id = obj.Id, Body = obj.Content, Date = obj.Timestamp, Callback = obj.CallbackName }; return _serializer.Serialize(myStructure); } public CapMessage UnPack(string packingMessage) { var myStructure = _serializer.DeSerialize(packingMessage); return new CapMessageDto { Id = myStructure.Id, Timestamp = myStructure.Date, Content = myStructure.Body, CallbackName = myStructure.Callback }; } } ``` 接下来,配置自定义的 `MyMessagePacker` 到服务中。 ```csharp services.AddCap(x =>{ }).AddMessagePacker(); ```