2017-03-07 7 views
1

Visual Studio 2010でWindows Phone 7.1のプロジェクトを行っています。JSONデータをダウンロードしてオブジェクトのリストに逆シリアル化しようとしています。以下は、Webリクエストを作成してレスポンスを処理するために使用しているコードです。datacontract jsonシリアライザのキャスト例外が無効です

public class HttpGetTask<T> 
{ 
    public HttpGetTask(string url, Action<T> onPostExecute) 
    { 
     this.Url = url; 
     this.OnPostExecute = onPostExecute; 
    } 

    public void Execute() 
    { 
     MessageBox.Show("We are in the task Execute method"); 
     if (this.OnPreExecute != null) 
     { 
      this.OnPreExecute(); 
     } 

     // create the http request 
     HttpWebRequest httpWebRequest = WebRequest.CreateHttp(this.Url); 
     httpWebRequest.Method = "GET"; 
     httpWebRequest.Accept = "application/json"; 

     // get the response asynchronously 
     httpWebRequest.BeginGetResponse(OnGetResponseCompleted, httpWebRequest); 
    } 

    private void OnGetResponseCompleted(IAsyncResult ar) 
    { 
     MessageBox.Show("We are in the OnGetResponseCompleted Method"); 
     var httpWebRequest = (HttpWebRequest)ar.AsyncState; 

     // get the response 
     HttpWebResponse response; 
     try 
     { 
      response = (HttpWebResponse)httpWebRequest.EndGetResponse(ar); 
     } 
     catch (WebException e) 
     { 
      this.InvokeOnErrorHandler("Unable to connect to the web page."); 
      return; 
     } 
     catch (Exception e) 
     { 
      this.InvokeOnErrorHandler(e.Message); 
      return; 
     } 

     if (response.StatusCode != HttpStatusCode.OK) 
     { 
      this.InvokeOnErrorHandler((int)response.StatusCode + " " + response.StatusDescription); 
      return; 
     } 

     // response stream 
     var stream = response.GetResponseStream(); 

     // deserialize json 
     var jsonSerializer = new DataContractJsonSerializer(typeof(T)); 
     var responseObject = (T)jsonSerializer.ReadObject(stream); 

     // call the virtual method 
     this.InvokeInUiThread(() => this.OnPostExecute(responseObject)); 
    } 

以下は、私が使用しているDataContractクラスです。

[DataContract] 
public class OwnersList 
{ 
    public List<Owner> Owners {get; set; } 
} 

[DataContract] 
public class Owner 
{ 
    [DataMember(Name = "oid")] 
    public string Oid { get; set; } 

    [DataMember(Name = "fname")] 
    public string Fname { get; set; } 

    [DataMember(Name = "lname")] 
    public string Lname { get; set; } 
} 

以下は、逆シリアル化しようとしているJSONデータのサンプルです。

[{"oid":"1","fname":"John","lname":"Doe"},{"oid":"2","fname":"Mary","lname":"Smith"},{"oid":"3","fname":"Jimi","lname":"Hendrix"},{"oid":"4","fname":"Carole","lname":"King"},{"oid":"5","fname":"John","lname":"Winchester"},{"oid":"6","fname":"John","lname":"Hurt"},{"oid":"7","fname":"Rick","lname":"Grimes"},{"oid":"8","fname":"Haris","lname":"Okic"},{"oid":"9","fname":"Dino ","lname":"Okic"},{"oid":"10","fname":"Mirza","lname":"Cirkic"}] 

私は私のアプリを実行すると、シリアライザのオブジェクトを作成するときに、私はどちらかの無効なキャスト例外を取得し、またはjsonserializer.ReadObject(ストリーム)ライン上。なぜこれが起こっているのかについてのアイデアはありますか?

答えて

0

はint型でプロパティを指定してください:

[DataMember(Name = "oid")] 
public string Oid { get; set; } 

[DataMember(Name = "oid")] 
public int Oid { get; set; } 
する必要があります
関連する問題