2012-09-26 2 views
1

JSON 개체를 쿼리 문자열로 변환하여 GET Url에 추가하는 가장 좋은 방법은 무엇입니까? POST는 직설적이며 웹 API 백엔드에서 읽을 수 있습니다.JSON 데이터를 C# GET 요청의 쿼리 문자열로 변환

{이름 : '마이크'}?

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()))); 

쿼리가 될 것 = 마이크 다음 JSON 개체가 당신의 예에서와 같이 평면 인 경우

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(); 
        } 
       } 


    } 

답변

8

= 이름 name=charlie&num=123

+1

이 배열을 처리 할 것인가는 = [ "자산", "가격"] L.B @ –

+0

, 덕분에 많이 포함되어 있습니다. – vkelman

0

나는이 코드를 닷넷 코어에서 실행한다.

public static string JsonToQuery(this string jsonQuery) 
    { 
     string str = "?"; 
     str += jsonQuery.Replace(":", "=").Replace("{",""). 
        Replace("}", "").Replace(",","&"). 
         Replace("\"", ""); 
     return str; 
    } 

예 :

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()); 
관련 문제