在C#GET请求中将JSON数据转换为查询字符串

Mik*_*ynn 4 c# asp.net json get query-string

将JSON对象转换为查询字符串以附加到GET Url的最佳方法是什么?POST很简单,我的Web API后端会读取它.

{姓名:'迈克'} =?姓名=迈克

 private static string MakeRequest(HttpWebRequest req, string data)
            {
                try
                {
                    if (req.Method == Verbs.POST.ToString() || req.Method == Verbs.PUT.ToString() || req.Method == Verbs.DELETE.ToString())
                    {
                        var encodedData = Encoding.UTF8.GetBytes(data);

                        req.ContentLength = encodedData.Length;
                        req.ContentType = "application/json";
                        req.GetRequestStream().Write(encodedData, 0, encodedData.Length);
                    }

                    using (var response = req.GetResponse() as HttpWebResponse)
                    using (var reader = new StreamReader(response.GetResponseStream()))
                    {
                        return reader.ReadToEnd();
                    }
                }
                catch (WebException we)
                {
                    if(we.Response == null)
                    {
                        return JsonConvert.SerializeObject(new { Errors = new List<ApiError> { new ApiError(11, "API is currently unavailable") }});
                    }

                    using (var response = we.Response as HttpWebResponse)
                    using (var reader = new StreamReader(response.GetResponseStream()))
                    {
                        return reader.ReadToEnd();
                    }
                }


  }
Run Code Online (Sandbox Code Playgroud)

L.B*_*L.B 14

如果json对象在您的示例中是平坦的,那么

string json = @"{
    ""name"": ""charlie"",
    ""num"": 123
}";

var jObj = (JObject)JsonConvert.DeserializeObject(json);

var query = String.Join("&",
                jObj.Children().Cast<JProperty>()
                .Select(jp=>jp.Name + "=" + HttpUtility.UrlEncode(jp.Value.ToString())));
Run Code Online (Sandbox Code Playgroud)

查询将是 name=charlie&num=123

  • 这会处理一个数组Includes = [“ Assets”,“ Prices”] (2认同)