【问题标题】:using custom system.text.json convertor in masstransit在公共交通中使用自定义 system.text.json 转换器
【发布时间】:2021-09-17 01:27:25
【问题描述】:

我正在尝试在 Masstransit 中使用我的自定义 Json 转换器但找不到任何方法来添加我的 JsonConverterFactory 类。
此外,我在基于 system.text.json 的序列化文档中找不到任何信息
你有什么想法吗?
谢谢

【问题讨论】:

    标签: c# json serialization masstransit converters


    【解决方案1】:

    MassTransit 当前(从 v7 开始)不使用 System.Text.Json,它使用 Newtonsoft.Json。目前没有计划增加对它的支持。

    如果您使用的是 JSON.net,则可以通过配置 JSON 序列化程序来添加其他转换器。

    cfg.ConfigureJsonSerializer(settings => settings.Converters.Add(...))
    

    保留现有转换器很重要,否则您可能会破坏现有功能。

    【讨论】:

    【解决方案2】:

    很遗憾,我没有足够的时间来编写基于牛顿的新转换器。因此,我编写了这段代码。我知道这不是一个好方法,但它对我有用。

        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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多