2016-11-05 5 views
0

Ich schreibe App für Android mit Xamarin.Recycler View (Xamarin Android)

Ich versuche Recycler zu sehen.

Hier ist meine json: http://pastebin.com/rL214a2T

Ich habe Klassen wie folgt aus:

public class Billing 
{ 
    public string first_name { get; set; } 
    public string last_name { get; set; } 
    public string company { get; set; } 
    public string address_1 { get; set; } 
    public string address_2 { get; set; } 
    public string city { get; set; } 
    public string state { get; set; } 
    public string postcode { get; set; } 
    public string country { get; set; } 
    public string email { get; set; } 
    public string phone { get; set; } 
} 

public class Shipping 
{ 
    public string first_name { get; set; } 
    public string last_name { get; set; } 
    public string company { get; set; } 
    public string address_1 { get; set; } 
    public string address_2 { get; set; } 
    public string city { get; set; } 
    public string state { get; set; } 
    public string postcode { get; set; } 
    public string country { get; set; } 
} 

public class Result 
{ 
    public int id { get; set; } 
    public int parent_id { get; set; } 
    public string status { get; set; } 
    public string order_key { get; set; } 
    public int number { get; set; } 
    public string currency { get; set; } 
    public string version { get; set; } 
    public bool prices_include_tax { get; set; } 
    public string date_created { get; set; } 
    public string date_modified { get; set; } 
    public int customer_id { get; set; } 
    public string discount_total { get; set; } 
    public string discount_tax { get; set; } 
    public string shipping_total { get; set; } 
    public string shipping_tax { get; set; } 
    public string cart_tax { get; set; } 
    public string total { get; set; } 
    public string total_tax { get; set; } 
    //public List<Billing> billing { get; set; } 
    public Billing billing { get; set; } 
    public Shipping shipping { get; set; } 
    public string payment_method { get; set; } 
    public string payment_method_title { get; set; } 
    public string transaction_id { get; set; } 
    public string customer_ip_address { get; set; } 
    public string customer_user_agent { get; set; } 
    public string created_via { get; set; } 
    public string customer_note { get; set; } 
    public string date_completed { get; set; } 
    public string date_paid { get; set; } 
    public string cart_hash { get; set; } 
    public List<object> line_items { get; set; } 
    public List<object> tax_lines { get; set; } 
    public List<object> shipping_lines { get; set; } 
    public List<object> fee_lines { get; set; } 
    public List<object> coupon_lines { get; set; } 
    public List<object> refunds { get; set; } 
} 

public class RootObject 
{ 
    public List<Result> results { get; set; } 
} 

ich so schreibe Klasse:

using System; 
using System.Collections.Generic; 
using System.Net.Http; 
using System.Net.Http.Headers; 
using System.Threading.Tasks; 
using ModernHttpClient; 
using Newtonsoft.Json; 

namespace StarWars.Api.Repository 
{ 
    public class MoviesRepository 
    { 
     public async Task<RootObject> GetAllFilms() 
     { 
      var httpClient = GetHttpClient(); 

      var response = await httpClient.GetAsync(ServiceEndPoints.StartWarsApiBaseUri).ConfigureAwait(false); 

      if (response.IsSuccessStatusCode) 
      { 
       var content = response.Content; 

       string jsonString = await content.ReadAsStringAsync().ConfigureAwait(false); 


       return JsonConvert.DeserializeObject<RootObject>(jsonString); 
      } 
      return new RootObject(); 
     } 

     private HttpClient GetHttpClient() 
     { 
      var httpClient = new HttpClient(new NativeMessageHandler()) 
      { 
       BaseAddress = new Uri(ServiceEndPoints.StartWarsApiBaseUri) 
      }; 


      httpClient.DefaultRequestHeaders.Accept.Clear(); 

      httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

      return httpClient; 
     } 
    } 

    public class ServiceEndPoints 
    { 
     public static readonly string StartWarsApiBaseUri = "http://api.simplegames.com.ua/index.php/?wc_orders=processing_orders"; 
     // public static readonly string GetFilmsUri = "films"; 
    } 
} 

Aber wenn ich versuche App zu starten ich diese haben Fehler

Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'StarWars.Api.Repository.RootObject' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly. 

To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array. 

Wie ich verstanden habe muss ich setzen

Wie kann ich es beheben?

UPDATE

Mit ReSharper I Remake Code wie diese

public async Task<List<RootObject>> GetAllFilms() 
    { 
     var httpClient = GetHttpClient(); 

     var response = await httpClient.GetAsync(ServiceEndPoints.StartWarsApiBaseUri).ConfigureAwait(false); 

     if (response.IsSuccessStatusCode) 
     { 
      var content = response.Content; 

      string jsonString = await content.ReadAsStringAsync().ConfigureAwait(false); 


      return JsonConvert.DeserializeObject<List<RootObject>>(jsonString); 
     } 
     return new List<RootObject>(); 
    } 

    private HttpClient GetHttpClient() 
    { 
     var httpClient = new HttpClient(new NativeMessageHandler()) 
     { 
      BaseAddress = new Uri(ServiceEndPoints.StartWarsApiBaseUri) 
     }; 


     httpClient.DefaultRequestHeaders.Accept.Clear(); 

     httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     return httpClient; 
    } 
} 

public class ServiceEndPoints 
{ 
    public static readonly string StartWarsApiBaseUri = "http://api.simplegames.com.ua/index.php/?wc_orders=processing_orders"; 
    // public static readonly string GetFilmsUri = "films"; 
} 

}

Aber ich habe Fehler in meinem MainActivity in dieser Reihe var moviesAdapter = new MovieAdapter(films.results)

Hier ist Fehler

Fehler CS1061 'List' enthält keine Definition für 'Ergebnisse' und keine Erweiterungsmethode 'results', die ein erstes Argument vom Typ 'List' akzeptiert (fehlt eine using-Direktive oder eine Assemblyreferenz?)

+0

Können Sie auch Ihre JSON teilen? –

+0

http://pastebin.com/rL214a2T @mww – Eugene

Antwort

1

Sie müssen Ihre Modellklassen ändern. Wenn Sie nicht wissen, wie Ihre Modellklassen aussehen sollen, können Sie das Tool wie json2sharp verwenden. Sie können JSON nicht mithilfe Ihrer Klassen deserialisieren. Verwenden Sie stattdessen diese Klassen.

public class Billing 
{ 
    public string first_name { get; set; } 
    public string last_name { get; set; } 
    public string company { get; set; } 
    public string address_1 { get; set; } 
    public string address_2 { get; set; } 
    public string city { get; set; } 
    public string state { get; set; } 
    public string postcode { get; set; } 
    public string country { get; set; } 
    public string email { get; set; } 
    public string phone { get; set; } 
} 

public class Shipping 
{ 
    public string first_name { get; set; } 
    public string last_name { get; set; } 
    public string company { get; set; } 
    public string address_1 { get; set; } 
    public string address_2 { get; set; } 
    public string city { get; set; } 
    public string state { get; set; } 
    public string postcode { get; set; } 
    public string country { get; set; } 
} 

public class LineItem 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public string sku { get; set; } 
    public int product_id { get; set; } 
    public int variation_id { get; set; } 
    public int quantity { get; set; } 
    public string tax_class { get; set; } 
    public string price { get; set; } 
    public string subtotal { get; set; } 
    public string subtotal_tax { get; set; } 
    public string total { get; set; } 
    public string total_tax { get; set; } 
    public List<object> taxes { get; set; } 
    public List<object> meta { get; set; } 
} 

public class ShippingLine 
{ 
    public int id { get; set; } 
    public string method_title { get; set; } 
    public string method_id { get; set; } 
    public string total { get; set; } 
    public string total_tax { get; set; } 
    public List<object> taxes { get; set; } 
} 

public class RootObject 
{ 
    public int id { get; set; } 
    public int parent_id { get; set; } 
    public string status { get; set; } 
    public string order_key { get; set; } 
    public int number { get; set; } 
    public string currency { get; set; } 
    public string version { get; set; } 
    public bool prices_include_tax { get; set; } 
    public string date_created { get; set; } 
    public string date_modified { get; set; } 
    public int customer_id { get; set; } 
    public string discount_total { get; set; } 
    public string discount_tax { get; set; } 
    public string shipping_total { get; set; } 
    public string shipping_tax { get; set; } 
    public string cart_tax { get; set; } 
    public string total { get; set; } 
    public string total_tax { get; set; } 
    public Billing billing { get; set; } 
    public Shipping shipping { get; set; } 
    public string payment_method { get; set; } 
    public string payment_method_title { get; set; } 
    public string transaction_id { get; set; } 
    public string customer_ip_address { get; set; } 
    public string customer_user_agent { get; set; } 
    public string created_via { get; set; } 
    public string customer_note { get; set; } 
    public string date_completed { get; set; } 
    public string date_paid { get; set; } 
    public string cart_hash { get; set; } 
    public List<LineItem> line_items { get; set; } 
    public List<object> tax_lines { get; set; } 
    public List<ShippingLine> shipping_lines { get; set; } 
    public List<object> fee_lines { get; set; } 
    public List<object> coupon_lines { get; set; } 
    public List<object> refunds { get; set; } 
} 
+0

Für aktuelle Antwort gibt es keine Daten für tax_lines, fee_lines, coupon_lines, Rückerstattungen, aber es wäre besser, Sie erstellen ein JSON mit allen möglichen Daten und die Verwendung http: // json2csharp. com/ –

+0

Danke, Alter. Es hilft – Eugene

Verwandte Themen