InterfaceConverterFactory.cs 932 B

123456789101112131415161718192021222324252627282930
  1. using System;
  2. using System.Text.Json;
  3. using System.Text.Json.Serialization;
  4. namespace Quadarax.Foundation.Core.Json
  5. {
  6. public class InterfaceConverterFactory : JsonConverterFactory
  7. {
  8. public InterfaceConverterFactory(Type concrete, Type interfaceType)
  9. {
  10. this.ConcreteType = concrete;
  11. this.InterfaceType = interfaceType;
  12. }
  13. public Type ConcreteType { get; }
  14. public Type InterfaceType { get; }
  15. public override bool CanConvert(Type typeToConvert)
  16. {
  17. return typeToConvert == this.InterfaceType;
  18. }
  19. public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options)
  20. {
  21. var converterType = typeof(InterfaceConverter<,>).MakeGenericType(this.ConcreteType, this.InterfaceType);
  22. return (JsonConverter)Activator.CreateInstance(converterType)!;
  23. }
  24. }
  25. }