c# - Can't Download Json Array Windows phone -


i can download json array in windows 8 following code:

astring = "http://website.com/image/image_manifest.json";

private async void getjson(string astring)         {             var client = new httpclient();             var lresponse = await client.getstringasync(astring); } 

this works 100%

i attempting same in windows phone

        private void getjson(string anasaurl)         {             webclient webclient = new webclient();             webclient.downloadstringcompleted += new downloadstringcompletedeventhandler(webclienthandler);               webclient.downloadstringasync(new uri(astring)); }     private void webclienthandler(object sender, downloadstringcompletedeventargs e)         {             var lresponse = e.result; } 

this not work, receive exception:

an exception of type 'system.reflection.targetinvocationexception' occurred in system.ni.dll not handled in user code

going inner exception see this:

innerexception {system.net.webexception: remote server returned error: notfound. ---> system.net.webexception: remote server returned error: notfound.

full exception below.

edit: httpclient class not available windows phone. chose webclient per interwebs suggestion. open other options. await method doesn't seem work , webclient must called async. think may have conversion of string uri. unfortunately url can't yet made public here similar url structure string.

edited clarity......

> -     e   {system.net.downloadstringcompletedeventargs}   system.net.downloadstringcompletedeventargs +       base    {system.net.downloadstringcompletedeventargs}   system.componentmodel.asynccompletedeventargs {system.net.downloadstringcompletedeventargs} -       result  'e.result' threw exception of type 'system.reflection.targetinvocationexception' string {system.reflection.targetinvocationexception} -       base    {system.reflection.targetinvocationexception: exception occurred during operation, making result invalid.  check innerexception exception details. ---> system.net.webexception: remote server returned error: notfound. ---> system.net.webexception: remote server returned error: notfound.    @ system.net.browser.clienthttpwebrequest.internalendgetresponse(iasyncresult asyncresult)    @ system.net.browser.clienthttpwebrequest.<>c__displayclasse.<endgetresponse>b__d(object sendstate)    @ system.net.browser.asynchelper.<>c__displayclass1.<beginonui>b__0(object sendstate)    --- end of inner exception stack trace ---    @ system.net.browser.asynchelper.beginonui(sendorpostcallback beginmethod, object state)    @ system.net.browser.clienthttpwebrequest.endgetresponse(iasyncresult asyncresult)    @ system.net.webclient.getwebresponse(webrequest request, iasyncresult result)    @ system.net.webclient.downloadbitsresponsecallback(iasyncresult result)    --- end of inner exception stack trace ---    @ system.componentmodel.asynccompletedeventargs.raiseexceptionifnecessary()    @ system.net.downloadstringcompletedeventargs.get_result()} system.exception {system.reflection.targetinvocationexception} +       data    {system.collections.listdictionaryinternal} system.collections.idictionary {system.collections.listdictionaryinternal}         helplink    null    string         hresult -2146232828 int -       innerexception  {system.net.webexception: remote server returned error: notfound. ---> system.net.webexception: remote server returned error: notfound.    @ system.net.browser.clienthttpwebrequest.internalendgetresponse(iasyncresult asyncresult)    @ system.net.browser.clienthttpwebrequest.<>c__displayclasse.<endgetresponse>b__d(object sendstate)    @ system.net.browser.asynchelper.<>c__displayclass1.<beginonui>b__0(object sendstate)    --- end of inner exception stack trace ---    @ system.net.browser.asynchelper.beginonui(sendorpostcallback beginmethod, object state)    @ system.net.browser.clienthttpwebrequest.endgetresponse(iasyncresult asyncresult)    @ system.net.webclient.getwebresponse(webrequest request, iasyncresult result)    @ system.net.webclient.downloadbitsresponsecallback(iasyncresult result)}   system.exception {system.net.webexception} +       [system.net.webexception]   {system.net.webexception: remote server returned error: notfound. ---> system.net.webexception: remote server returned error: notfound.    @ system.net.browser.clienthttpwebrequest.internalendgetresponse(iasyncresult asyncresult)    @ system.net.browser.clienthttpwebrequest.<>c__displayclasse.<endgetresponse>b__d(object sendstate)    @ system.net.browser.asynchelper.<>c__displayclass1.<beginonui>b__0(object sendstate)    --- end of inner exception stack trace ---    @ system.net.browser.asynchelper.beginonui(sendorpostcallback beginmethod, object state)    @ system.net.browser.clienthttpwebrequest.endgetresponse(iasyncresult asyncresult)    @ system.net.webclient.getwebresponse(webrequest request, iasyncresult result)    @ system.net.webclient.downloadbitsresponsecallback(iasyncresult result)}   system.net.webexception +       data    {system.collections.listdictionaryinternal} system.collections.idictionary {system.collections.listdictionaryinternal}         helplink    null    string         hresult -2146233079 int -       innerexception  {system.net.webexception: remote server returned error: notfound.    @ system.net.browser.clienthttpwebrequest.internalendgetresponse(iasyncresult asyncresult)    @ system.net.browser.clienthttpwebrequest.<>c__displayclasse.<endgetresponse>b__d(object sendstate)    @ system.net.browser.asynchelper.<>c__displayclass1.<beginonui>b__0(object sendstate)}  system.exception {system.net.webexception} +       [system.net.webexception]   {system.net.webexception: remote server returned error: notfound.    @ system.net.browser.clienthttpwebrequest.internalendgetresponse(iasyncresult asyncresult)    @ system.net.browser.clienthttpwebrequest.<>c__displayclasse.<endgetresponse>b__d(object sendstate)    @ system.net.browser.asynchelper.<>c__displayclass1.<beginonui>b__0(object sendstate)}  system.net.webexception +       data    {system.collections.listdictionaryinternal} system.collections.idictionary {system.collections.listdictionaryinternal}         helplink    null    string         hresult -2146233079 int +       innerexception  null    system.exception         message "the remote server returned error: notfound."    string         source  "system.windows"    string         stacktrace  "   @ system.net.browser.clienthttpwebrequest.internalendgetresponse(iasyncresult asyncresult)\r\n   @ system.net.browser.clienthttpwebrequest.<>c__displayclasse.<endgetresponse>b__d(object sendstate)\r\n   @ system.net.browser.asynchelper.<>c__displayclass1.<beginonui>b__0(object sendstate)"    string +       static members       +       non-public members               message "the remote server returned error: notfound."    string         source  "system.windows"    string         stacktrace  "   @ system.net.browser.asynchelper.beginonui(sendorpostcallback beginmethod, object state)\r\n   @ system.net.browser.clienthttpwebrequest.endgetresponse(iasyncresult asyncresult)\r\n   @ system.net.webclient.getwebresponse(webrequest request, iasyncresult result)\r\n   @ system.net.webclient.downloadbitsresponsecallback(iasyncresult result)"  string +       static members       +       non-public members               message "an exception occurred during operation, making result invalid.  check innerexception exception details."   string         source  "system"    string         stacktrace  "   @ system.componentmodel.asynccompletedeventargs.raiseexceptionifnecessary()\r\n   @ system.net.downloadstringcompletedeventargs.get_result()" string +       static members       +       non-public members       
share|improve question
up vote 1 down vote accepted

you can write function similar downloadstringtaskasync jon skeet suggested.

webclient wc = new webclient(); string result = await wc.downloadasync("http://www.stackoverflow.com"); 

public static partial class myextensions {     public static task<string> downloadasync(this webclient wc, string url)     {         taskcompletionsource<string> tcs = new taskcompletionsource<string>();         downloadstringcompletedeventhandler completed = null;          completed = (s, e) =>         {             try             {                 tcs.setresult(e.result);             }             catch (exception ex)             {                 tcs.setexception(ex.innerexception ?? ex);             }                         {                 wc.downloadstringcompleted -= completed;             }         };          wc.headers[httprequestheader.useragent] = "mozilla/5.0 (windows; u; windows nt 6.1; de; rv:1.9.2.12) gecko/20101026 firefox/3.6.12";         wc.downloadstringcompleted += completed;         wc.downloadstringasync(new uri(url));          return tcs.task;     } } 
share|improve answer

you should using downloadstringtaskasync rather downloadstringasync- @ point you'll able await result, although in async method. edit: thought available on wp8, apparently it's not.

if want use httpclient in windows phone app, can use microsoft.net.http nuget package.

(you can use downloadstringasync, "old" way of using webclient, need subscribe appropriate events instead. using async/await cleaner.)

share|improve answer
    
my webclient doesn't have method downloadstringtaskasync calling from? edit: misread said. below stands true downloadstringasync not downloadstringtaskasync tried that. though, throws error. says cannot await downloadstringasync because void. cannot await void. >error 1 cannot await 'void' – sean dunford may 4 '13 @ 8:03
1  
@seandunford: didn't await downloadstringasync - said await downloadstringtaskasync. they're different methods. – jon skeet may 4 '13 @ 8:03
    
please see above. – sean dunford may 4 '13 @ 8:05
1  
hmmm... thought wp8 did have downloadstringtaskasync. if doesn't, i'd recommend microsoft.net.http client instead. – jon skeet may 4 '13 @ 8:10
1  
@sean: don't know whether linked beta version or not, that's want. i'm afraid can't more - i'm out family. i'll tonight if haven't got other answers. – jon skeet may 4 '13 @ 8:21

your answer

 
discard

posting answer, agree privacy policy , terms of service.

not answer you're looking for? browse other questions tagged or ask own question.

Comments