Convert JSON data to querystring in C# GET request
If the json object is flat as in your example, then
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())));
query would be name=charlie&num=123
I make this code to run in .Net Core:
public static string JsonToQuery(this string jsonQuery) { string str = "?"; str += jsonQuery.Replace(":", "=").Replace("{",""). Replace("}", "").Replace(",","&"). Replace("\"", ""); return str; }
Example:
var _baseURI = "http://www.example.com/";var endPoint = "myendpoint";ExampleObjectModel requestModel = new ExampleObjectModel();var requestModelJson = JsonConvert.SerializeObject(requestModel);var url = string.Format("{0}{1}{2}", _baseURI, endPoint, requestModelJson.JsonToQuery());
Try this, work all object, in deep
public static class ExtensionMethods{ public static string GetQueryString(this object obj, string prefix = "") { var query = ""; try { var vQueryString = (JsonConvert.SerializeObject(obj)); var jObj = (JObject)JsonConvert.DeserializeObject(vQueryString); query = String.Join("&", jObj.Children().Cast<JProperty>() .Select(jp => { if (jp.Value.Type == JTokenType.Array) { var count = 0; var arrValue = String.Join("&", jp.Value.ToList().Select<JToken, string>(p => { var tmp = JsonConvert.DeserializeObject(p.ToString()).GetQueryString(jp.Name + HttpUtility.UrlEncode("[") + count++ + HttpUtility.UrlEncode("]")); return tmp; })); return arrValue; } else return (prefix.Length > 0 ? prefix + HttpUtility.UrlEncode("[") + jp.Name + HttpUtility.UrlEncode("]") : jp.Name) + "=" + HttpUtility.UrlEncode(jp.Value.ToString()); } )) ?? ""; } catch (Exception ex) { } return query; }}
To use: SomeObject.GetQueryString();