2013-04-11 5 views
1

jQuery를 사용하여 배열 구성원과 함께 복잡한 객체를 게시하는 유스 케이스가 있습니다. 예 :디버그 ServiceStack POST 요청 deserialization

data: { 
    obj1: obj1, 
    arr1: [ ... ] 
} 

서버에서는 ServiceStack 서비스를 구현했습니다. 서버의 자동 요청 매핑은 요청 멤버에 대해 null을 생성하지만 Request.GetRawBody()를 추출한 다음 ServiceStack.Text.JsonSerializer.DeserializeFromString을 사용하면 필요한 결과를 얻습니다.

실제 비 직렬화를 디버그하고 누락 된 부분을 확인하는 것이 유용합니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까?

예 : 몇 필드 간단한 요청 객체를 정의 평평한 물체에

패스 :

$.ajax({ 
    //... 
    data: { 
    name: 'John Doe' 
    } 
}); 

:

public class Request 
{ 
    public string Name { get; set; } 
} 

는 jQuery를 아약스 전화 걸기 호출이 작동하면 서버는 "John Doe" 이름 속성 아동 객체

패스 객체

public class Request 
{ 
    public Caller Caller { get; set; } 
} 

public class Caller 
{ 
    public string Name { get; set; } 
} 

그런 다음 jQuery를에서 전화하기 : 전화 후

$.ajax({ 
    // ... 
    data: { 
    caller: { 
     name: 'John Doe' 
    } 
    } 
}); 

을, 서비스에 대한 요청의 "발신자"속성은 " null "이므로이 접근 방식이 작동하지 않습니다.

결론 필자는 원래의 평가에서 객체와 배열 조합을 언급하고있었습니다. 문제는 직렬화/비 직렬화하는 간단한 하위 개체를 얻는 것입니다. 개념이 지원되지 않는다는 의미입니까, 아니면 객체를 잘못 전달 했습니까?

답변

1

의 희망 :

{"Caller":{"Name":"John Doe"}} 

이를 확인하는 가장 쉬운 방법은 다음을 수행하는 것입니다 대답은 다른 사람들을 돕습니다. 그것은 $를 낸다.아약스 (나는 단지 그것을 놓쳤다 명확하게 jQuery를 문서에 설명되어 있습니다) 인코딩 된 형태의 URL로 콘텐츠 형식을 보내는 : http://api.jquery.com/jQuery.ajax/

는 contentType이 설정을 '응용 프로그램/JSON은'이제 모든 데이터가 문제를 해결 제대로 서버에서 deserialized.

1

실제 deserialization에 대해 뭔가 잘못 생각한다면 github에서 소스 코드를 다운로드하고 실패한 단위 테스트를 만드는 것이 좋습니다. json deserialization으로 생각한다면 ServiceStack.Text 프로젝트를 다운로드하십시오. 그렇지 않으면 주 ServiceStack 프로젝트를 다운로드해야합니다. 기존 단위 테스트를 읽는 것은 전체 프로젝트가 작동하는 방식에 상당히 유익합니다.

그러나 가능성은 json 표기법이 잘못되었습니다입니다. DTO를 Serialize 한 결과와 AJAX 호출에 실제로 전달한 결과를 비교하여 json을 리버스 엔지니어링하는 것이 종종 유용합니다.

업데이트 : 다음과 같아야합니다 귀하의 JSON : 나는이 문제를 알아 낸

var r = new MyRequest() {Caller = new Caller() {Name = "John Doe"}}; 
var json = r.ToJson(); 
+0

응답 해 주셔서 감사합니다. 나는 실제로 뭔가 잘못되었다고 생각하지 않는다. 나는 틀린 일을하고 있다고 확신한다. deserialization에 문제가 있다고 생각하지 않습니다. 단순히 몸체를 deserialize 할 때 작동합니다. 내가 알아 내려고하는 것은 개체가 servicestack에 의해 요청 개체에 매핑 될 때와 본문이 수동으로 deserialize 될 때 달라지는 점입니다. 희망은 그 말이 맞습니다. 그렇지 않은 경우 코드 샘플을 제공 할 수 있습니다. – user975060

+0

특정 코드 예제를 제공하면 도움이 될 것이라고 생각합니다. 앞으로 다른 사람들에게 도움이 될 것입니다. – kampsj

+0

원본 항목을 업데이트했습니다. 잠시 시간을내어 죄송합니다. – user975060