2016-09-18 61 views
0

我使用下面的代码,在我的Xamarin跨平台项目中的端点阅读JSON和我收到错误 无法读取释放的对象异常,也触发的ObjectDisposedExceptionXamarin不能访问处置对象错误

它说的是错代码我可以用更好的方式编写它吗?

public async Task<APISchoolDetailModel> GetSchooDetailsAsync() 
{ 
    APISchoolDetailModel api_data = new APISchoolDetailModel(); 
    try 
    { 
     var client = new System.Net.Http.HttpClient(); 
     client.DefaultRequestHeaders.Add("Accept", "application/json"); 
     var web_client = await client.GetAsync("http://appapitest.net/APIs/Student/Schooldetails"); 
     var response_string= web_client.Content.ReadAsStringAsync().Result;            
     DataContractJsonSerializer serializer = new DataContractJsonSerializer(api_data.GetType());    
     MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(response_string)); 
     api_data = serializer.ReadObject(ms) as APISchoolDetailModel; 
    } 
    catch (Exception ex) { }    
    return api_data; 
} 

控制器自带到行VAR web_client =等待client.GetAsync(”然后它不会再和几秒钟后,我得到异常

是写读这段代码什么更好的办法和解析JSON

+0

你得到那个异常的确切线是什么?因为我期望所有的异常都是基于空的catch块被吞下去的。 – rene

+0

'var response_string = web_client.Content.ReadAsStringAsync()。Result' - 不这样做。做'var response_string =等待web_client.Content.ReadAsStringAsync()'。 – GSerg

+0

我在该行之前收到异常。 COntrol是不是到这条线 –

回答

0

@Gserg指出,你不应该这样做一些重要的事情:

var response_string= web_client.Content.ReadAsStringAsync().Result; 

在使用代替:

var response_string= await web_client.Content.ReadAsStringAsync(); 

异步工作方法中:

是你使用。结果,这可能是导致线程或同样的东西中死锁您所遇到的,因为线程可能试图更新或使用一个变量已经从GC收集。

+0

我改变了代码,但我仍然得到例外。我在上面的线上得到了异常,即var web_client = await client.GetAsync(“http://appapitest.net/APIs/Student/Schooldetails”); –

相关问题