RestSharp更新AddHandler方法的使用以使用工厂委托

axa*_*axa 4 c# restsharp

RestSharp v106.6.9的最新版本显然进行了一些更改,使得对请求的AddHandler方法的替代已过时,例如以下签名:

[Obsolete("Use the overload that accepts a factory delegate")]
public void AddHandler(IDeserializer deserializer, params string[] contentTypes)
Run Code Online (Sandbox Code Playgroud)

因为它建议使用facrory委托表格

public void AddHandler(string contentType, Func<IDeserializer> deserializerFactory)

public void AddHandler(Func<IDeserializer> deserializerFactory, params string[] contentTypes)
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我指出实现此目标的示例。或解释如何将下面实现IDeserializer的customSerializer的使用转换为工厂委托:

RestClient.AddHandler("application/json", CustomJsonSerializer.Instance);


public class CustomJsonSerializer : IDeserializer
{
    public static CustomJsonSerializer Instance => new CustomJsonSerializer();

    public string ContentType
    {
        get => "application/json";
        set { } // maybe used for Serialization?
    }

    public string DateFormat { get; set; }

    public string Namespace { get; set; }

    public string RootElement { get; set; }

    public T Deserialize<T>(IRestResponse response) => RestSharpResponseHandlers.DeserializeObject<T>(response);
}
Run Code Online (Sandbox Code Playgroud)

spa*_*lug 10

根据https://github.com/restsharp/RestSharp/blob/master/RestSharp/RestClient.cs上的源代码:

 [Obsolete("Use the overload that accepts a factory delegate")]
 public void AddHandler(string contentType, IDeserializer deserializer) =>
    AddHandler(contentType, () => deserializer);
Run Code Online (Sandbox Code Playgroud)

过时的重载只是调用AddHandler(string contentType, Func<IDeserializer> deserializerFactory)重载。

因此,您可以替换代码以添加自定义处理程序,如下所示:

RestClient.AddHandler("application/json", () => { return CustomJsonSerializer.Instance; });
Run Code Online (Sandbox Code Playgroud)