【发布时间】:2021-09-17 01:27:25
【问题描述】:
我正在尝试在 Masstransit 中使用我的自定义 Json 转换器但找不到任何方法来添加我的 JsonConverterFactory 类。
此外,我在基于 system.text.json 的序列化文档中找不到任何信息
你有什么想法吗?
谢谢
【问题讨论】:
标签: c# json serialization masstransit converters
【问题讨论】:
标签: c# json serialization masstransit converters
MassTransit 当前(从 v7 开始)不使用 System.Text.Json,它使用 Newtonsoft.Json。目前没有计划增加对它的支持。
如果您使用的是 JSON.net,则可以通过配置 JSON 序列化程序来添加其他转换器。
cfg.ConfigureJsonSerializer(settings => settings.Converters.Add(...))
保留现有转换器很重要,否则您可能会破坏现有功能。
【讨论】:
很遗憾,我没有足够的时间来编写基于牛顿的新转换器。因此,我编写了这段代码。我知道这不是一个好方法,但它对我有用。
public class MessageConverter : JsonConverter
{
private readonly System.Text.Json.JsonSerializerOptions Option = new() { Converters = { { new RmJsonConverterFactory() } } };
private readonly Type[] Types;
public MessageConverter()
{
Types = new Type[3];
Types[0] = typeof(CreatePartyCommand);
Types[1] = typeof(UpdatePartyCommand);
Types[2] = typeof(DeletePartyCommand);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteStartObject();
writer.WritePropertyName("data");
writer.WriteValue(System.Text.Json.JsonSerializer.Serialize(value, Option));
writer.WriteEndObject();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
reader.Read();
reader.Read();
return System.Text.Json.JsonSerializer.Deserialize(reader.Value.ToString(), objectType, Option);
}
public override bool CanConvert(Type objectType) => Types.Any(x => x == objectType);
}
【讨论】: