我有:
public class Query {...}
public interface IClient
{
[Get("/api/endpoint?data={query}")]
Task<Result> GetData(Query query);
}
Run Code Online (Sandbox Code Playgroud)
但是 Refit 在 Query 实例上调用 ToString 而不是使用序列化程序。有没有办法在不使用包装类的情况下实现这一目标?
我最终使用了一个自定义序列化器,它将除原始类型和实现 IConvertible 的类型之外的所有类型转换为 JSON:
class DefaultUrlParameterFormatter : IUrlParameterFormatter
{
public string Format(object value, ParameterInfo parameterInfo)
{
if (value == null)
return null;
if (parameterInfo.ParameterType.IsPrimitive)
return value.ToString();
var convertible = value as IConvertible; //e.g. string, DateTime
if (convertible != null)
return convertible.ToString();
return JsonConvert.SerializeObject(value);
}
}
var settings = new RefitSettings
{
UrlParameterFormatter = new DefaultUrlParameterFormatter()
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
943 次 |
| 最近记录: |