C# 如何使RestSharp使用JsonConverter?

C# 如何使RestSharp使用JsonConverter?,c#,json,json.net,deserialization,restsharp,C#,Json,Json.net,Deserialization,Restsharp,我有基类和一些派生类: abstract class A { public string type{get;} } class A1: A { type => Classes.A1 } class A2: A { type => Classes.A2 } 我希望从外部API得到响应: class ResponseResult { public List<A> values{get;set;} } 类响应结果 { 公共列表值{get;

我有基类和一些派生类:

abstract class A
{
    public string type{get;}
}

class A1: A
{
    type => Classes.A1
}
class A2: A
{
    type => Classes.A2
}
我希望从外部API得到响应:

class ResponseResult
{
     public List<A> values{get;set;}
}
类响应结果
{
公共列表值{get;set;}
}
但当我读取响应时,它会收到“无法创建抽象类”错误消息。 我已经编写了简单的转换器

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;
}
公共类MyConverter:JsonConverter
{
私有静态只读JsonSerializer序列化程序=新JsonSerializer();
公共重写void WriteJson(JsonWriter编写器、对象值、JsonSerializer序列化器)
{
}
公共重写对象ReadJson(JsonReader阅读器,类型objectType,对象existingValue,JsonSerializer序列化程序)
{
var jObject=jObject.Load(读卡器);
var typeString=jObject.Value(“类型”);
var requiredType=RecoverType(类型字符串);
返回序列化程序。反序列化(jObject.CreateReader(),requiredType);
}
私有类型RecoverType(类类型)
{
开关(类型)
{
案例1.A1:
返回类型(A1);
案例2.A2:
返回类型(A2);
违约:
抛出新ArgumentOutOfRangeException(nameof(type),type,null);
}
}
公共覆盖布尔CanConvert(类型objectType)
{
返回typeof(A).IsAssignableFrom(objectType)| | typeof(A)==objectType;
}
公共覆盖boolcanwrite=>false;
}

如何告诉RestSharp使用此转换器?

我从RestSharp反序列化响应:

public async Task<T> GetAsync<T>(string endpointUrl, CancellationToken cancellationToken = new CancellationToken())
    {
        var restRequest = new RestRequest()
        {
            Resource = endpointUrl,
            Method = Method.GET
        };

        restRequest.AddHeader("Authorization", $"bearer {this.tokenHandler.GetToken()}");

        IRestResponse response = await this.restClient.ExecuteTaskAsync(restRequest, cancellationToken);

        switch ((int)response.StatusCode)
        {
            case int sc when (sc >= 200 && sc < 300):
            {
                var responseData = JsonConvert.DeserializeObject<T>(response.Content);
                return responseData;
            }
            case 401:
            {
                throw new ApiAuthorizationException();
            }
            default:
            {
                throw new ApiException(response.StatusCode,endpointUrl, response.Content);
            }
        }
    }
公共异步任务GetAsync(字符串endpointUrl,CancellationToken CancellationToken=new CancellationToken()) { var restRequest=新的restRequest() { 资源=端点URL, Method=Method.GET }; AddHeader(“Authorization”,$“bearer{this.tokenHandler.GetToken()}”); IRestResponse response=wait this.restClient.ExecuteTaskAsync(restRequest,cancellationToken); 开关((int)响应状态代码) { 当(sc>=200&&sc<300)时的情况int sc: { var responseData=JsonConvert.DeserializeObject(response.Content); 返回响应数据; } 案例401: { 抛出新的ApiAuthorizationException(); } 违约: { 抛出新的ApiException(response.StatusCode、endpointUrl、response.Content); } } }
什么是类?@miechooy它是枚举。你能提供枚举吗?@miechooy枚举类{A1=1,A2=2}默认情况下,RestSharp不使用Json.NET。有关如何在restsharp中启用Json.NET的确认和说明,请参阅或。