2016-06-01 2 views
0

나는 Facebook Messenger가 보내는 API를 시험 중입니다. 내 테스트에서 지금까지 두 가지 응답이 있습니다. 응답 (200)의 경우,이 같은 것입니다 : 나는이 두 응답을 일치하도록 두 개의 클래스를 생성 할 수 있습니다.NET : 알 수없는 구조의 json 응답을 처리하는 방법

{ 
    "error": { 
     "message": "(#100) Invalid fbid.", 
     "type": "OAuthException", 
     "code": 100, 
     "fbtrace_id": "EjUIvT0HLph" 
      } 
} 

:

{ 
    "recipient_id": "1730337993881234", 
    "message_id": "mid.1464765699033:1edf6d866bc6de1234" 
} 

400 응답의 경우, 그것은 같은 것입니다. 그러나 내 테스트는 철저하지 않습니다. .NET에서 알 수없는 구조의 json 응답을 처리 할 수있는 방법이 있습니까?

+1

'동적'사용 방향으로 뭔가 시도해 봤니? –

+0

현재 어떻게 처리하려고합니까? –

+0

@SimonPrice 두 구조를 일치시키기 위해 두 클래스를 생성 중입니다. –

답변

0

나열된 응답을보고 나서 한 클래스를 사용하여 매핑 할 수 있습니다. recipient_id, message_id 및 오류 속성에 대한 속성이 있는지 확인하기 만하면됩니다.

오류 일 경우 응답을받을 때 오류 속성을 채울 수 있으며 테스트 할 수 있습니다. 그렇지 않으면 다른 속성이 채워져 오류 Null이 남습니다.

이것은 가장 간단한 방법 일 수 있으며 특히 응답 구조가 알려진 경우 동적 개체에 대한 사용자 지정 모델 바인더를 만드는 것을 처리하지 않아도된다고 생각합니다!

편집

난 그냥 메신저 API를 체크 아웃 한 그것은 정말로 단지 나의 제안 일을해야 responses의 두 가지 형태를 돌려 않습니다.

0

나는 Mo09890과 같이 사과와 오렌지를 섞는 것이 좋지 않다고 생각합니다. 더 좋은 아이디어는 결과를 다르게 파싱하는 것입니다. 예 : 오류가 발생한 경우 오류가 있음을 알게 된 다음 JSON.NET을 사용하여 특수 오류 구조로 구문 분석 할 수 있습니다.

나는 RestSharp를 사용하여 각각의 응답을 내가 얻을 나는 그런 오류 여부 있는지 확인하십시오 당신이 완전히 당신이 하나를 만들 수있는 방법이없는 구조를 모르는 경우 그렇지 않으면

if (response.StatusCode != HttpStatusCode.OK) 
{ 
    MyError result = JObject.Parse(response.Content) 
          .ToObject<MyError>(); 

    if (result.ErrorCode != null) 
    { 
     return result; 
    } 

    throw new ApplicationException($"Service error. StatusCode: {response.StatusCode}. Details: {response.Content}"); 
} 

. NET에서. 따라서 결과를 JSON.NET을 사용하여 구문 분석 할 수있는 일반 JSON 객체로 작업해야합니다. 또는 다른 라이브러리 또는 귀하의 클라이언트가 지원하는 경우 : 동적 키워드 :

관련 문제