2017-04-26 3 views
0

Hallo, ich habe den folgenden Code und von ihm möchte ich einige Felder bekommen und in einen Android.TextViewWie ein JsonArray mit Newtonsoft.Json deserialisieren?

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




    } 


} 

}

Und ich versuche, ein JsonResponse deserialisieren, die ein Array ist, hier ist die Antwort, die ich von der API erhalten:

**{ 
    "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 
    } 
    } 
    ] 
    }** 

ich eine Klasse erstellt, dass diese Strings hat

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

Die Felder, die ich in die Anwendung einfügen muss, sind orderId orderStatusCode und orderStatusDescription.

Ich versuche, es zu deserialisieren, aber es gibt diese Nachricht: Argument 1: kann nicht von ‚CustomerJson‘ zu ‚string‘ konvertiert und Verwendung von Nicht zugeordnete lokale Variable ‚json‘

Wie kann ich deserialisieren diese ?

Antwort

0

Wichtig

1) Auftrag ist Subelement Auftrags [] -Array.

2) Kunde ist Unterelement der Bestellung.

Sie sollten im Array orders [] Schritt für Schritt mit einem Enumerator, einer Schleife usw. suchen. Und dann, wenn jede Schleife abgeschlossen ist, sollten Sie die Customer-Klasse im Auftragselement analysieren.

Beispiel;

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

Deserialize JSON to C# Classes

+0

Ich änderte die Klasse, aber ich habe immer noch den Fehler. Bitte überprüfen Sie die neue Klasse. :) –

0

Ihre json falsch ist, sind Sie nicht ein '}'. Hier ist der gültige 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 
    } 
    }] 
} 

Auch habe ich das Modell mit http://json2csharp.com/ ich Einfügen sie unten. Versuchen Sie, Ihre JSON mit dem folgenden Modell zu analysieren, sollte es funktionieren

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

Wenn ich versuche, zu deserialisieren, habe ich immer noch den Fehler über kann nicht konvertieren. var r = JsonConvert.DeserializeObject (r); –

Verwandte Themen