回收站视图 (Xamarin Android )
Posted
技术标签:
【中文标题】回收站视图 (Xamarin Android )【英文标题】:Recycler View (Xamarin Android ) 【发布时间】:2017-03-19 04:19:22 【问题描述】:我使用 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.
据我所知,我需要设置
我该如何解决?
更新
使用 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“列表”不包含“结果”的定义,并且找不到接受“列表”类型的第一个参数的扩展方法“结果”(您是否缺少 using 指令或程序集引用?)
【问题讨论】:
你能分享你的json吗? pastebin.com/rL214a2T@mww 【参考方案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;
【讨论】:
对于当前响应,没有 tax_lines 、 fee_lines 、 coupon_lines 、refunds 的数据,但最好创建一个包含所有可能数据的 json 并使用 json2csharp.com 谢谢老兄。它有帮助以上是关于回收站视图 (Xamarin Android )的主要内容,如果未能解决你的问题,请参考以下文章
与使用 xamarin 的设计器屏幕相比,Android 设备上的视图位置不同
Xamarin 表单轮播视图 - Android 和 iOS 差异
以编程方式将视图添加到 Xamarin.Android C# 中的 GridLayout
Xamarin 中 ListView 的不同视图形式 Android 和 UWP