RestSharp обновляет использование метода AddHandler для использования фабричного делегата - PullRequest
2 голосов
/ 06 марта 2019

Последняя версия RestSharp v106.6.9, по-видимому, вносит некоторые изменения, делая переопределения метода AddHandler для запроса устаревшими, такие как эта подпись:

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

Как предлагается использовать форму делегата facrory

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

public void AddHandler(Func<IDeserializer> deserializerFactory, params string[] contentTypes)

Кто-нибудь сможет указать мне на пример реализации этого. Или объясните ниже, как преобразовать мое использование customSerializer, реализующего IDeserializer, в делегат фабрики:

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);
}

1 Ответ

5 голосов
/ 20 марта 2019

Согласно исходному коду на 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);

Устаревшая перегрузка просто вызывает перегрузку AddHandler(string contentType, Func<IDeserializer> deserializerFactory).

Таким образом, вы можете заменить свой код, добавив свой собственный обработчик какследует:

RestClient.AddHandler("application/json", () => { return CustomJsonSerializer.Instance; });
...