2017-04-26 115 views
0

您好我有下面的代码,并从中我想获得一些字段并放入Android.TextView如何使用Newtonsoft.Json反序列化JsonArray?

using System; 
using Android.App; 
using Android.Widget; 
using Android.OS; 
using RestSharp; 
using Newtonsoft.Json; 
using Android.Util; 
using App4.Resources; 
using Newtonsoft.Json.Linq; 
using Org.Json; 
using System.Net; 
using System.IO; 
using System.Collections.Generic; 

namespace App4 
{ 
[Activity(Label = "App4", MainLauncher = true, Icon = "@drawable/icon")] 
public class MainActivity : Activity 
{ 
    EditText edtcpf; 
    Button btnConsumer; 
    TextView txtcpf; 
    RestRequest cpf { get; set; } 
    public RestClient consumer { get; set; } 
    IRestResponse mensagemConsumer; 
    TextView txtsobrenome; 
    RestClient orderId { get; set; } 
    RestRequest requestorderId { get; set; } 
    IRestResponse answerorder { get; set; } 
    TextView txtnome; 
    TextView txtorder; 
    TextView txtmensagem; 

    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     // Set our view from the "main" layout resource 
     SetContentView(Resource.Layout.Main); 
     btnConsumer = FindViewById<Button>(Resource.Id.btnConsumer); 
     edtcpf = FindViewById<EditText>(Resource.Id.edtcpf); 
     txtcpf = FindViewById<TextView>(Resource.Id.txtcpf); 
     txtsobrenome = FindViewById<TextView>(Resource.Id.txtresposta); 
     txtnome = FindViewById<TextView>(Resource.Id.txtNome); 
     txtorder = FindViewById<TextView>(Resource.Id.txtorder); 
     txtmensagem = FindViewById<TextView>(Resource.Id.txtMensagem); 
     btnConsumer.Click += BtnConsumer_Click; 

    } 

    private void BtnConsumer_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      // API Consumer CPF 

      consumer = new RestClient("https://qa.api-latam.whirlpool.com/v1.0/consumers"); 
      cpf = new RestRequest("/" + edtcpf.Text, Method.GET); 
      cpf.AddHeader("Content-Type", "application/json; charset=utf-8"); 
      cpf.AddHeader("Authorization", "Bearer 70197e6c-d81b-384c-bb32-d69e8c10b101"); 
      mensagemConsumer = consumer.Execute(cpf); 
      Pessoa pessoa = JsonConvert.DeserializeObject<Pessoa>(mensagemConsumer.Content); 
      txtnome.Text = "Nome: " +pessoa.firstName; 
      txtsobrenome.Text = "Sobrenome: "+ pessoa.lastName; 

      // API Consumer Appliances 
      orderId = new RestClient("https://qa.api-latam.whirlpool.com/v1.0/consumers/"); 
      requestorderId = new RestRequest("/"+ edtcpf.Text+ "/service-orders", Method.GET); 
      requestorderId.AddHeader("Content-Type", "application/json; charset=utf-8"); 
      requestorderId.AddHeader("Authorization", "Bearer 70197e6c-d81b-384c-bb32-d69e8c10b101"); 
      answerorder = orderId.Execute(requestorderId); 
      CustomerJson json = JsonConvert.DeserializeObject<List<CustomerJson>>(json); 
      txtorder.Text = json.Customer.orderId; 





     } 
     catch (Exception) 
     { 

      throw; 
     } 




    } 


} 

}

而且我想反序列化JsonResponse这是一个数组,这里是我从API得到的回应:

**{ 
    "orders": [ 
    { 
    "order": { 
    "orderId": 7004093603, 
    "orderStatusCode": "CANC", 
    "orderStatusDescription": "Cancelado", 
    "serviceProviderId": 3649, 
    "orderOpeningDate": "2015-07-07", 
    "orderSchedulingDate": "2015-07-18", 
    "orderSchedulingPeriod": "M", 
    "orderSettlementDate": null, 
    "orderCancellationDate": null 
    } 
}, 
{ 
    "order": { 
    "orderId": 7004153791, 
    "orderStatusCode": "AGEN", 
    "orderStatusDescription": "Agendado", 
    "serviceProviderId": 3524, 
    "orderOpeningDate": "2016-08-31", 
    "orderSchedulingDate": "2016-09-01", 
    "orderSchedulingPeriod": "M", 
    "orderSettlementDate": null, 
    "orderCancellationDate": null 
    } 
}, 
{ 
    "order": { 
    "orderId": 7004156972, 
    "orderStatusCode": "ABRT", 
    "orderStatusDescription": "Aberto", 
    "serviceProviderId": 30820, 
    "orderOpeningDate": "2017-04-13", 
    "orderSchedulingDate": null, 
    "orderSchedulingPeriod": null, 
    "orderSettlementDate": null, 
    "orderCancellationDate": null 
    } 
}, 
{ 
    "order": { 
    "orderId": 7002178478, 
    "orderStatusCode": "CANC", 
    "orderStatusDescription": "Cancelado", 
    "serviceProviderId": 3555, 
    "orderOpeningDate": "2014-02-22", 
    "orderSchedulingDate": "2014-02-24", 
    "orderSchedulingPeriod": "M", 
    "orderSettlementDate": null, 
    "orderCancellationDate": null 
    } 
}, 
{ 
    "order": { 
    "orderId": 7002118317, 
    "orderStatusCode": "CANC", 
    "orderStatusDescription": "Cancelado", 
    "serviceProviderId": 3555, 
    "orderOpeningDate": "2014-02-10", 
    "orderSchedulingDate": "2014-02-15", 
    "orderSchedulingPeriod": "M", 
    "orderSettlementDate": null, 
    "orderCancellationDate": null 
    } 
    } 
    ] 
    }** 

我创建具有此字符串类

class RootObject 
{ 
[JsonProperty("orders")] 
public Results Results { get; set; } 
} 

class Results 
{ 
[JsonProperty("order")] 
public Dictionary<string, JobCode> JobCodes { get; set; } 
} 

class JobCode 
{ 
[JsonProperty("orderId")] 
public string orderId { get; set; } 
[JsonProperty("orderStatusCode")] 
public string orderStatusCode { get; set; } 
[JsonProperty("orderStatusDescription")] 
public string orderStatusDescription { get; set; } 
    } 

我需要插入到应用程序的字段是orderId orderStatusCode和orderStatusDescription。

我试图反序列化,但它返回此消息:参数1:无法从“CustomerJson”到“字符串”和未分配的局部变量“JSON”的使用

转换我如何反序列化这个?

回答

0

重要的事情

1)令是订单[]阵列的子元素。

2)客户是订单的子元素。

您应该在oders []数组中逐步搜索enumarator,循环等...然后,当每个循环都完成时,您应该按顺序元素解析Customer类。

示例;

foreach(var order in orders) 
{ 
    var order = order.name; 
    //access to order data; 
} 

Deserialize JSON to C# Classes

+0

我改变了类,但我仍然有错误。请检查新课程。 :) –

0

您的JSON是不正确,你错过了一个 '}'。下面是有效的JSON

{ 
    "orders": [{ 
    "order": { 
     "orderId": 7004093603, 
     "orderStatusCode": "CANC", 
     "orderStatusDescription": "Cancelado", 
     "serviceProviderId": 3649, 
     "orderOpeningDate": "2015-07-07", 
     "orderSchedulingDate": "2015-07-18", 
     "orderSchedulingPeriod": "M", 
     "orderSettlementDate": null, 
     "orderCancellationDate": null 
    } 
    }] 
} 

而且,我使用http://json2csharp.com/我下面粘贴他们创建的模型。尝试使用以下模型解析您的json,它应该工作

public class Order2 { 
    public long orderId { get; set; } 
    public string orderStatusCode { get; set; } 
    public string orderStatusDescription { get; set; } 
    public int serviceProviderId { get; set; } 
    public string orderOpeningDate { get; set; } 
    public string orderSchedulingDate { get; set; } 
    public string orderSchedulingPeriod { get; set; } 
    public object orderSettlementDate { get; set; } 
    public object orderCancellationDate { get; set; } 
} 

public class Order{ 
    public Order2 order { get; set; } 
} 

public class RootObject{ 
    public List<Order> orders { get; set; } 
} 
+0

当我尝试反序列化时,我仍然有关于无法转换的错误。 var r = JsonConvert.DeserializeObject (r); –

相关问题