#if NETCOREAPP
using System;
using System.Reflection;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace SabreTools.Wrappers
{
///
/// Serializer class for interfaces
///
///
internal class ConcreteInterfaceSerializer : JsonConverterFactory
{
public override bool CanConvert(Type typeToConvert) => typeToConvert.IsInterface;
private class ConcreteInterfaceSerializerOfType : JsonConverter
{
static ConcreteInterfaceSerializerOfType()
{
if (!typeof(TInterface).IsAbstract && !typeof(TInterface).IsInterface)
throw new NotImplementedException(string.Format("Concrete class {0} is not supported", typeof(TInterface)));
}
#if NETCOREAPP3_1
public override TInterface Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
=> throw new NotImplementedException();
#else
public override TInterface? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
=> throw new NotImplementedException();
#endif
public override void Write(Utf8JsonWriter writer, TInterface value, JsonSerializerOptions options)
=> JsonSerializer.Serialize