Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在get请求中传递json参数_C#_.net_Refit - Fatal编程技术网

C# 在get请求中传递json参数

C# 在get请求中传递json参数,c#,.net,refit,C#,.net,Refit,我有: 公共类查询{…} 公共接口客户端 { [Get(“/api/endpoint?data={query}”)] 任务获取数据(查询); } 但是在查询实例上重新安装调用ToString,而不是使用序列化程序。有没有办法不用包装器类来实现这一点?如果我正确理解文档,唯一的问题就是命名。由于您将其用作参数而不是路径的一部分,因此它更接近于此: public class Query {...} public interface IClient { [Get("/api/endpoint

我有:

公共类查询{…}
公共接口客户端
{
[Get(“/api/endpoint?data={query}”)]
任务获取数据(查询);
}

但是在查询实例上重新安装调用ToString,而不是使用序列化程序。有没有办法不用包装器类来实现这一点?

如果我正确理解文档,唯一的问题就是命名。由于您将其用作参数而不是路径的一部分,因此它更接近于此:

public class Query {...}
public interface IClient
{
    [Get("/api/endpoint?data={query}")]
    Task<Result> GetData(Query query);
}


最后,我使用了一个自定义序列化程序,它可以将除基元类型和实现IConvertible的类型之外的所有类型转换为JSON:

http://myhost/api/endpoint?data=somestuff

不幸的是,这种方式也使用了ToString。我在ReFit上也遇到了同样的问题(它不允许您更改url中的内容的序列化方式),并决定推出我自己的类似ReFit的项目。只要您的代码不应该从windows应用商店或其他地方下载,您就可以使用WebAnchor,它将让您决定如何序列化您的查询对象。@mattias WebAnchor值得称赞,但是您可以使用带有ReficateAllright的自定义查询序列化程序,这对我来说是新闻。:)美好的
GetData(aQueryObject);
http://myhost/api/endpoint?data=somestuff
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()
};