웹 서비스에서 데이터를 가져 오는 Windows Phone 7.1 앱이 있습니다. 데이터는 XML 형식입니다. Visual Studio 2010에서 비동기 CTP 3을 사용하는 언어가 vb.net입니다.자손 루프의 빈 XElement
웹 서비스에서 응답을 성공적으로 가져 와서 해당 문자열을 XDocument로 파싱했습니다.
<movies>
<movie code="MOV1299" title="Age of Heroes" is3D="0" genre="THRILLER" rating="D" cast="Sean Bean, Danny Dyer, Izabella Miko, James D'Arcy, Sebastian Street, William Houston" director="Adrian Vitoria" language="ENGLISH" subtitle="BAHASA INDONESIA" />
<movie code="MOV1325" title="Fast and Furious 5" is3D="0" genre="ACTION" rating="D" cast="Vin Diesel, Paul Walker, Dwayne Johnson, Jordana Brewster, Tyrese Gibson, Elsa Pataky" director="Justin Lin" language="ENGLISH" subtitle="BAHASA INDONESIA" />
</movies>
: 웹 서비스에서 XML의
Private Async Function GetMovies() As Task
Dim client As New WebClient
Dim address = (New Uri(New Uri(APIROOT), "movieschedule/movies")).ToString
Dim resulttxt = Await client.DownloadStringTaskAsync(address)
Dim resultdoc = XDocument.Parse(resulttxt)
Dim resultlist As New Collections.ObjectModel.ObservableCollection(Of Movies)
For Each movie In resultdoc.Descendants("movie")
' **the variable 'movie' contains nothing**
Dim m As New Movies With {
.Cast = movie.Attribute("cast").Value,
...
.Title = movie.Attribute("title").Value
}
resultlist.Add(m)
Next
Movies = resultlist
End Function
예 다음 XML 통해 반복하여 뷰 모델을 채울하려고 할 때하지만 문제가 있기 때문에 루프 변수는 (나는 그것이하여 XElement를 포함 할) 아무것도 포함하지 않는다
새 무비를 만드는 줄에 중단 점을 넣었습니다. 변수 resultdoc
이 채워지는 것을 확인할 수 있습니다. 나는 즉각적인 창문에서 시도했다. resultdoc.Descendants("movie").Count
은 15를 반환했다. resultdoc.Descendants("movie").First.Attribute("code").Value
은 정확하게 "MOV1299"를 반환했다.
System.NullReferenceException was unhandled
Message=NullReferenceException
StackTrace:
at MyApp.MainPageVM.VB$StateMachine_2_GetMovies.MoveNext()
at System.Runtime.CompilerServices.TaskAwaiter.<>c__DisplayClass5.<OnCompletedInternal>b__1(Object state)
at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
at System.Delegate.DynamicInvokeOne(Object[] args)
at System.MulticastDelegate.DynamicInvokeImpl(Object[] args)
at System.Delegate.DynamicInvoke(Object[] args)
at System.Windows.Threading.DispatcherOperation.Invoke()
at System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority)
at System.Windows.Threading.Dispatcher.OnInvoke(Object context)
at System.Windows.Hosting.CallbackCookie.Invoke(Object[] args)
at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args)
at System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult)
변수 movie
아무것도 포함하지 않는 이유 : 내가 브레이크 포인트에서 계속 때
는이 오류가있어? resultdoc.Descendants("movie")
에서 적절한 XElement가 포함되도록하려면 어떻게해야합니까? [코멘트에서 아래로 복사]
XML에 XML 네임 스페이스, 기회 당? – svick
@svick XML에 네임 스페이스가 없습니다. –
예외 대화 상자 (디버그 메뉴 아래에 있어야 함)로 이동하여 NullReferenceException이 throw 될 때 중단되도록 선택하십시오. 오류가 어디에 있는지 정확히 알 수 있습니다. 서버에서 돌아 오는 XML 노드 중 하나에 제목이나 캐스트 또는 다른 속성 중 하나가 없으므로 그 노드에서 죽어 가고 있습니다. –