Browse Source

fix(cap): 修复某些情况下事件数据序列化与abp不一致的问题

pull/383/head
cKey 4 years ago
parent
commit
2701c593ea
  1. 23
      aspnet-core/modules/common/LINGYUN.Abp.EventBus.CAP/LINGYUN/Abp/EventBus/CAP/AbpCapSerializer.cs

23
aspnet-core/modules/common/LINGYUN.Abp.EventBus.CAP/LINGYUN/Abp/EventBus/CAP/AbpCapSerializer.cs

@ -3,18 +3,24 @@ using DotNetCore.CAP.Serialization;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using System; using System;
using System.Buffers; using System.Buffers;
using System.Text;
using System.Text.Json; using System.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Json;
using Volo.Abp.Json.SystemTextJson; using Volo.Abp.Json.SystemTextJson;
namespace LINGYUN.Abp.EventBus.CAP namespace LINGYUN.Abp.EventBus.CAP
{ {
public class AbpCapSerializer : ISerializer public class AbpCapSerializer : ISerializer
{ {
private readonly IJsonSerializer _jsonSerializer;
private readonly AbpSystemTextJsonSerializerOptions _jsonSerializerOptions; private readonly AbpSystemTextJsonSerializerOptions _jsonSerializerOptions;
public AbpCapSerializer(IOptions<AbpSystemTextJsonSerializerOptions> options) public AbpCapSerializer(
IJsonSerializer jsonSerializer,
IOptions<AbpSystemTextJsonSerializerOptions> options)
{ {
_jsonSerializer = jsonSerializer;
_jsonSerializerOptions = options.Value; _jsonSerializerOptions = options.Value;
} }
@ -29,8 +35,9 @@ namespace LINGYUN.Abp.EventBus.CAP
{ {
return Task.FromResult(new TransportMessage(message.Headers, null)); return Task.FromResult(new TransportMessage(message.Headers, null));
} }
var messageStr = _jsonSerializer.Serialize(message.Value);
var jsonBytes = JsonSerializer.SerializeToUtf8Bytes(message.Value, _jsonSerializerOptions.JsonSerializerOptions); var jsonBytes = Encoding.UTF8.GetBytes(messageStr);
// var jsonBytes = JsonSerializer.SerializeToUtf8Bytes(message.Value, _jsonSerializerOptions.JsonSerializerOptions);
return Task.FromResult(new TransportMessage(message.Headers, jsonBytes)); return Task.FromResult(new TransportMessage(message.Headers, jsonBytes));
} }
@ -41,19 +48,23 @@ namespace LINGYUN.Abp.EventBus.CAP
return Task.FromResult(new Message(transportMessage.Headers, null)); return Task.FromResult(new Message(transportMessage.Headers, null));
} }
var obj = JsonSerializer.Deserialize(transportMessage.Body, valueType, _jsonSerializerOptions.JsonSerializerOptions); var messageBytes = Encoding.UTF8.GetString(transportMessage.Body);
var obj = _jsonSerializer.Deserialize(valueType, messageBytes);
// var obj = JsonSerializer.Deserialize(transportMessage.Body, valueType, _jsonSerializerOptions.JsonSerializerOptions);
return Task.FromResult(new Message(transportMessage.Headers, obj)); return Task.FromResult(new Message(transportMessage.Headers, obj));
} }
public string Serialize(Message message) public string Serialize(Message message)
{ {
return JsonSerializer.Serialize(message, _jsonSerializerOptions.JsonSerializerOptions); return _jsonSerializer.Serialize(message);
// return JsonSerializer.Serialize(message, _jsonSerializerOptions.JsonSerializerOptions);
} }
public Message Deserialize(string json) public Message Deserialize(string json)
{ {
return JsonSerializer.Deserialize<Message>(json, _jsonSerializerOptions.JsonSerializerOptions); return _jsonSerializer.Deserialize<Message>(json);
// return JsonSerializer.Deserialize<Message>(json, _jsonSerializerOptions.JsonSerializerOptions);
} }
public object Deserialize(object value, Type valueType) public object Deserialize(object value, Type valueType)

Loading…
Cancel
Save