RestSharp 更新使用 AddHandler 方法以使用工厂委托
RestSharp updating use of AddHandler method to use factory delegate
最新版本的 RestSharp v106.6.9 显然做了一些更改,使得 Request 的 AddHandler 方法的覆盖过时,例如这个签名:
[Obsolete("Use the overload that accepts a factory delegate")]
public void AddHandler(IDeserializer deserializer, params string[] contentTypes)
因为它建议使用工厂委托形式
public void AddHandler(string contentType, Func<IDeserializer> deserializerFactory)
public void AddHandler(Func<IDeserializer> deserializerFactory, params string[] contentTypes)
谁能给我指出一个实现这个的例子。
或者在下面解释如何将我对实现 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);
}
根据 https://github.com/restsharp/RestSharp/blob/dev/src/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; });
我运行陷入同样的问题。看起来 OpenAPI 代码正在为多种上下文类型设置多个处理程序,所以我编写了这个小函数
private void AddHandlerHelper(RestClient client, IDeserializer deserializerFactory, string[] contextTypes)
{
foreach( var contextType in contextTypes)
client.AddHandler(contextType,() => deserializerFactory);
}
并且调用从这里更改:
client.AddHandler(() => existingDeserializer, "application/json", "text/json", "text/x-json", "text/javascript", "*+json");
至此
AddHandlerHelper(client, existingDeserializer, new string[] { "application/json", "text/json", "text/x-json", "text/javascript", "*+json"});
生成的代码中有六个地方我需要这个函数。
最新版本的 RestSharp v106.6.9 显然做了一些更改,使得 Request 的 AddHandler 方法的覆盖过时,例如这个签名:
[Obsolete("Use the overload that accepts a factory delegate")]
public void AddHandler(IDeserializer deserializer, params string[] contentTypes)
因为它建议使用工厂委托形式
public void AddHandler(string contentType, Func<IDeserializer> deserializerFactory)
public void AddHandler(Func<IDeserializer> deserializerFactory, params string[] contentTypes)
谁能给我指出一个实现这个的例子。 或者在下面解释如何将我对实现 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);
}
根据 https://github.com/restsharp/RestSharp/blob/dev/src/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; });
我运行陷入同样的问题。看起来 OpenAPI 代码正在为多种上下文类型设置多个处理程序,所以我编写了这个小函数
private void AddHandlerHelper(RestClient client, IDeserializer deserializerFactory, string[] contextTypes)
{
foreach( var contextType in contextTypes)
client.AddHandler(contextType,() => deserializerFactory);
}
并且调用从这里更改:
client.AddHandler(() => existingDeserializer, "application/json", "text/json", "text/x-json", "text/javascript", "*+json");
至此
AddHandlerHelper(client, existingDeserializer, new string[] { "application/json", "text/json", "text/x-json", "text/javascript", "*+json"});
生成的代码中有六个地方我需要这个函数。