2016-11-05 3 views
0

Я пишу приложение для Android с помощью Xamarin.Recycler View (Xamarin Android)

Я стараюсь сделать вид переработчика.

Вот мой JSON: http://pastebin.com/rL214a2T

У меня есть классы, как это:

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; } 
} 

Я пишу класс как это:

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"; 
    } 
} 

Но когда я пытаюсь запустить приложение, которое я это погрешность

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. 

Как я понял, мне нужно установить

Как я могу это исправить?

UPDATE

Использование Resharper Я римейк подобный код

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"; 
} 

}

Но у меня есть ошибки в моем MainActivity в этом ряду var moviesAdapter = new MovieAdapter(films.results)

Вот ошибка

Ошибка CS1061 «Список» не содержит определения для «результатов» и не может быть найден «результат» метода расширения, принимающий первый аргумент типа «Список» (вам не хватает директивы использования или ссылки на сборку?)

+0

Вы также можете поделиться своим json? –

+0

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

ответ

1

Вам нужно изменить классы моделей. Если вы не знаете, как следует выглядеть в ваших классах моделей, вы можете использовать инструмент, например, json2sharp. С помощью классов вы не можете десериализовать JSON. Используйте эти классы вместо своего.

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

Для текущего ответа нет данных для tax_lines, fee_lines, coupon_lines, возмещений, но было бы лучше создать json со всеми возможными данными и использовать http: // json2csharp. com/ –

+0

Спасибо, чувак. Помогает – Eugene

Смежные вопросы