I have base and some derived classes:
abstract class A
{
public string type{get;}
}
class A1: A
{
type => Classes.A1
}
class A2: A
{
type => Classes.A2
}
and this I expect get in response from outer API:
class ResponseResult
{
public List<A> values{get;set;}
}
but when i read response it get "Cannot create an abstract class" error message. I've already write simple converter
public class MyConverter: JsonConverter
{
private static readonly JsonSerializer Serializer = new JsonSerializer();
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var jObject = JObject.Load(reader);
var typeString = jObject.Value<Classes>("type");
var requiredType = RecoverType(typeString);
return Serializer.Deserialize(jObject.CreateReader(), requiredType);
}
private Type RecoverType(Classes type)
{
switch (type)
{
case Classes.A1:
return typeof(A1);
case Classes.A2:
return typeof(A2);
default:
throw new ArgumentOutOfRangeException(nameof(type), type, null);
}
}
public override bool CanConvert(Type objectType)
{
return typeof(A).IsAssignableFrom(objectType) || typeof(A) == objectType;
}
public override bool CanWrite => false;
}
How I can tell RestSharp to use this converter?