2010-08-06 1 views
0

왜 WCF DataService의에서 다음 JSON 문자열을 전송 할 수 있습니다 : 당신이 whilest일관성 치료

{ SomeElement: 'val1', SomeOtherElement: 'val2' } 

이 같은 정상 WCF 서비스에 보낼를

[OperationContract, 
WebInvoke (Method = "POST", 
      ResponseFormat = WebMessageFormat.Json, 
      RequestFormat = WebMessageFormat.Json, 
      BodyStyle = WebMessageBodyStyle.Wrapped)] 
public string SomeMehtod(string SomeElement, string SomeOtherElement) 

다음 JSON 문자열

{ "SomeElement": "val1", "SomeOtherElement": "val2" } 

이 불일치는 분명하지 않습니다. WCF 데이터 서비스에서 요소 이름에 대한 따옴표를 생략 할 수있는 동안 일반 웹 서블릿에서 큰 따옴표를 사용해야하는 이유는 무엇입니까?

어쩌면 somone에이에 대한 답을 알고

....

+0

JSON 표준 (http://www.json.org/)에서는 요소 이름을 인용해야하며 모든 문자열에 대해 큰 따옴표가 필요합니다. 첫 번째 예제는 유효한 JavaScript이지만 유효한 JSON은 아닙니다. 그러나 그것은 그 모순을 실제로 설명하지는 않습니다. –

+0

맞습니다. WCF 데이터 서비스에서도 큰 따옴표를 사용할 수 있습니다. WCF가 정상 WCF보다 더 관대하다는 것 같습니다. WCF 데이터 서비스가 WCF 이후에 소개 되었기 때문에 이상한 일이 있습니다 ... 저는 단지 궁금 해서요 ... – Jeldrik

+0

WCF 데이터 서비스 (GET, POST, PUT 등)를 호출하기 위해 어떤 동사를 사용하고 있습니까? POST입니까? 그리고 그것은 맞춤 서비스 방법입니까? –

답변

0

내가 WCF의 JSON 파싱 인프라 뒤 내부 배관에 매우 익숙하고, 본질적으로, 두 번째 상황을 담당 배관이 정말 지원하도록 설계 "엄격한"표준 준수 JSON.

첫 번째 상황이 비 호환 JSON에서 작동한다는 것은 단지 우연의 일치입니다. 그것을 읽지 마라. 그것은 의식적인 디자인 결정이 아니 었습니다. 희망이 혼란을 해결!

자세한 내용은 Reflector를 사용하여 DataContractJsonSerializerOperationFormatter, DataContractJsonSerializerOperationBehavior 및 DataContractJsonSerializer를 탐색 할 수 있습니다.