Xamarin无法访问已处置的对象错误

时间:2016-09-18 10:00:07

标签: c# xamarin.forms

我使用以下代码从我的Xamarin crossplatform项目中的端点读取JSON,我收到错误 无法读取已处置的对象异常或触发ObjectDisposedException

代码有问题我可以用更好的方式编写吗?

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 = await client.GetAsync(&#34;然后它不再进一步,几秒钟后我得到异常

有没有更好的方法来编写此代码来读取和解析JSON

1 个答案:

答案 0 :(得分:0)

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

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

代替使用:

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

在异步任务方法中:

你使用.Result这可能导致线程内的死锁或你遇到的相同的东西,因为线程可能正在尝试更新或使用已经从GC收集的变量。