2012-04-02 3 views
0

안녕 왜 내가 inalid 캐스트 예외가 발생합니까?유효하지 않은 캐스트 예외, json, windows phone

다음은 내가 읽으려고하는 json 출력이지만 잘못된 캐스트 예외가 있습니다.

{"RouteId": "1231", "RouteName":"1 Whitehawk - Mile Oak", "Stops": [ { "StopId":"6882", "StopName":"Swanborough Drive", "OperatorsCode4":"bridmpj", "Lat":"50.8326729229821", "Lng":"-0.103217996656901" } , { "StopId":"6883", "StopName":"Haybourne Road", "OperatorsCode4":"brimapm", "Lat":"50.8317788816436", "Lng":"-0.10486427645364671" } , { "StopId":"6884", "StopName":"Coolham Drive", "OperatorsCode4":"brijtwm", "Lat":"50.829695439856089", "Lng":"-0.10512229365031489" } , { "StopId":"6885", "StopName":"St Cuthmans Church", "OperatorsCode4":"briapdg", "Lat":"50.8283233642578", "Lng":"-0.104808002710342" } , 

플러스 stops.cs의 클래스 :

public class Stops 
{ 
    public string StopId { get; set; } 
    public string StopName { get; set; } 
} 

편집 :

그래서 내 자신의 URL을 만든 다음 데이터를 테스트 한 후, 내가 있던 URL과 함께 할 수있는 뭔가의 나는 생각한다. 그냥 더 테스트를하고.

편집 2

내가 텍스트 파일에 데이터를 입력하고 난 다음을 수행하는 경우 데이터를 디버깅 작동합니다.

공급의 끝은 다음과 같이이다 :

"LNG는": "- 0.277833998203278", ""}]}

내가 제거하면

""다음 작동합니다. 그러나 나는 그것을 처음부터 거기에 넣는 것을 어떻게 멈추게합니까?

+1

예외의 * 세부 사항 *은 무엇입니까? –

+0

디버깅 할 때이 줄의 끝에 도달하면 RootContainer2 rootContainer = Ser.ReadObject (e.Result) as RootContainer2; 오류 메시지가 곧 끝나고 간단히 "InvalidCastException"이 표시됩니다. –

+0

예외 메시지의 * 메시지 만 표시하기 때문입니다. 스택 트레이스와 같은 것보다 더 많은 정보를 얻을 수 있어야합니다. –

답변

0

특히 Stops 클래스에서 [DataContract][DataMember] 특성이 누락되어 예외가 발생할 수 있습니다. Silverlight 5를 제외하고 DataContract은 직렬화되어야하는 모든 클래스와 속성이 명시 적 특성을 가져야하는 옵트 인 모델입니다.

업데이트는 :

귀하의 코멘트 후, 나는 당신이받은 JSON 데이터로 더 자세히 봤는데. 두 개의 JSON을 제공합니다. 결합하면 모양은 다음과 같습니다.

{ 
    "RouteId": "1231", 
    "RouteName": "1 Whitehawk - Mile Oak", 
    "Stops": [ 
     { 
      "StopId": "6882", 
      "StopName": "Swanborough Drive", 
      "OperatorsCode4": "bridmpj", 
      "Lat": "50.8326729229821", 
      "Lng": "-0.103217996656901" 
     }, 
     { 
      "StopId": "6883", 
      "StopName": "Haybourne Road", 
      "OperatorsCode4": "brimapm", 
      "Lat": "50.8317788816436", 
      "Lng": "-0.10486427645364671" 
     }, 
     { 
      "StopId": "6884", 
      "StopName": "Coolham Drive", 
      "OperatorsCode4": "brijtwm", 
      "Lat": "50.829695439856089", 
      "Lng": "-0.10512229365031489" 
     }, 
     { 
      "StopId": "6885", 
      "StopName": "St Cuthmans Church", 
      "OperatorsCode4": "briapdg", 
      "Lat": "50.8283233642578", 
      "Lng": "-0.277833998203278", 
      "" 
     } 
    ] 
} 

나는 JSON에 대해 단순히 유효하지 않습니다. 자신을 알았을 때 여분의 쉼표와 여분의 emtpy 쌍 따옴표가 끝에 있습니다. 그들은 올바른 JSON과 잘못된 JSON의 차이를 만듭니다. JSONLint과 같은 onlne JSON 검사기로 확인할 수 있습니다.

가장 좋은 해결책은 서버 측에서 해결할 수있는 방법입니다. 그렇지 않으면 serializer에 전달하기 전에 데이터를 수정하는 것이 가장 좋습니다.

+0

편집 2를 확인하십시오. 내 업데이트 –

+0

고마워요. 유효성 검사기에 결과를 추가 한 후에도 유효합니다. 그러나 이것으로 끝날 수는 없다. "," –

0

ReadObject()은 Stream (또는 일부 XML 관련 유형)을 사용하지만 e.Result은 type 객체입니다.

시도 :

RootContainer2 rootContainer = ser.ReadObject((Stream)e.Result) as RootContainer2; 

편집 : 제 생각에, 그건 아마 잘못된 매개 변수 예외가 아닌 잘못된 캐스트를 던질 것입니다.

ReadObject()에 의해 반환되는 개체가 RootContainer2으로 캐스팅 할 수없는 것 같습니다.

+0

그 이후의 행은 계속 건너 뛰고 오류 메시지가 표시됩니다. –

+0

예, 게시 한 후 깨달은 경우 다른 오류가 발생합니다. RootContainer2 클래스가 StopId 및 StopName 대신 RouteId 및 RouteName에 대한 속성을 가져야하지 않습니까? – Nomad101

+0

나는 모든 걸 얻으려고하고있다. –

관련 문제