2013-06-12 2 views
0

으로 파싱하는 데 도움이된다면 CampBX API를 사용하여 내 계정에서 자금을 얻고 있습니다.JSON 응답을 C#

using (var wb = new WebClient()) 
     { 
      String url = "https://CampBX.com/api/myfunds.php"; 

      var data = new NameValueCollection(); 
      data["user"] = "USERNAME"; 
      data["pass"] = "PASSWORD"; 
      var response = wb.UploadValues(url, "POST", data); 
     } 

WebClient.UploadValues()byte[] 반환하고 내가 제대로 그 구문 분석하는 방법을 아무 생각이 : 나는 API 호출을 만들기 위해 다음 코드를 썼다.

Here is the CampBX info, under Account Balances.

답변

1

간단히 말하면 JSON 구문 분석기를 사용해야합니다. 개인적으로 나는 Newtonsoft.Json을 좋아하며,이 예제에서 사용할 것입니다.

첫 번째 단계는 byte[]을 문자열 개체 또는 TextReader 문자 시퀀스로 변환하는 것입니다. 두 번째 단계는이 정보를 파서에 전달하는 것입니다. parsedToken 객체가 다음 클릭하여 원하는 데이터를 추출 할 수 있습니다

JToken parsedToken; 
using (var responseReader = new StreamReader(new MemoryStream(response))) { 
    parsedToken = JToken.ReadFrom(responseReader); 
} 

: 그래서, 당신의 경우, 코드는 다음과 같을 것이다. (JToken 개체에서 데이터를 추출하는 방법에 대한 내용은 the documentation을 참조하십시오.)

응답 엔터티의 문자 인코딩과 관련된 정보는 무시됩니다. StreamReader은 기본적으로 UTF-8 인코딩을 사용하므로 UTF-8 또는 ASCII를 구문 분석하기에 충분합니다. 서버에서 사용하는 JSON 인코더에 따라 응답은 항상 ASCII와 호환 될 수 있으므로 걱정하지 않아도됩니다. 그럼에도 불구하고 조사해야 할 사항입니다.

0

DataContractJsonSerializer 내장 객체는 반환 된 객체의 내부 구조가 무엇인지 (최소한 JSON에서 추측 할 수 있음) 제공되는 경우 여기에 귀하의 친구가됩니다.

단계는 다음과 같습니다 는 직렬화 된 JSON 객체를 보유 계약 클래스를 정의

namespace AppNameSpace 
{ 
    [DataContract]    /* Place this inside your app namespace */ 
    internal class iResponse /*Name this class appropriately */ 
    { 
     [DataMember] 
     internal string field1; 
     [DataMember] 
     internal string field2; 
     [DataMember] 
     internal Int32 field3; 
    } 
    ... 
} 

실제 구문 분석 자체는 약 3 라인

자세한 내용과 예제는
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(iOpenParams)); 
MemoryStream stream1 = new MemoryStream(response); 
iResponse resp_json = (iResponse)ser.ReadObject(stream1); 

을 참조입니다 : http://msdn.microsoft.com/en-us/library/bb412179.aspx

0

내 솔루션은 간단합니다.

Object retorno; 
var response = wb.UploadValues(url, "POST", data); 
using (var responseReader = new StreamReader(new MemoryStream(response))) 
{ 
    retorno = JsonConvert.DeserializeObject<Object>(responseReader.ReadToEnd()); 
}