2016-03-23 4 views
1

zu starten, bin ich ein Anfänger. Ich habe nach etwas gesucht, das wie dieses Problem aussieht, ohne das Problem zu lösen. Und jetzt bin ich eine Weile mit diesem Problem beschäftigt. Ich verwende eine API von unserer lokalen Postzustellung, wo wir Informationen wie Lieferfrist, Adresse usw. in einem json Link erhalten können. Aber in diesem Fall sieht der JSON ein bisschen anders aus und ich weiß nicht, wie ich damit arbeiten soll.C# Auf der Suche nach Hilfe zur Deserialisierung dieser Art von JSON

Ich wäre wirklich glücklich, wenn mir jemand erklären könnte, wie ich auf die Daten wie Zustellung und Adresse zugreifen kann. Gerade jetzt, wenn ich es versuche, zeigt es nur an, dass der Wert null ist.

Ich benutze json.net für Deserialisieren

Unten können Sie sehen, wie es sein ..

private async void button_Click(object sender, RoutedEventArgs e) 
{ 
    string url = "https://api2.postnord.com/rest/shipment/v1/trackandtrace/findByIdentifier.json?id=..."; 

    HttpClient client = new HttpClient(); 
    string date = await client.GetStringAsync(new Uri(url)); 
    var jarray = JsonConvert.DeserializeObject<Rootobject>(date); 
} 

public class Rootobject 
{ 
    public Trackinginformationresponse TrackingInformationResponse { get; set; } 
} 

public class Trackinginformationresponse 
{ 
    public Shipment[] shipments { get; set; } 
} 

public class Shipment 
{ 
    public string shipmentId { get; set; } 
    public string uri { get; set; } 
    public int assessedNumberOfItems { get; set; } 
    public DateTime deliveryDate { get; set; } 
    public DateTime estimatedTimeOfArrival { get; set; } 
    public Service service { get; set; } 
    public Consignor consignor { get; set; } 
    public Consignee consignee { get; set; } 
    public Statustext statusText { get; set; } 
    public string status { get; set; } 
    public Totalweight totalWeight { get; set; } 
    public Totalvolume totalVolume { get; set; } 
    public Assessedweight assessedWeight { get; set; } 
    public Item[] items { get; set; } 
    public Additionalservice[] additionalServices { get; set; } 
    public object[] splitStatuses { get; set; } 
    public Shipmentreference[] shipmentReferences { get; set; } 
} 

public class Service 
{ 
    public string code { get; set; } 
    public string name { get; set; } 
} 

public class Consignor 
{ 
    public string name { get; set; } 
    public Address address { get; set; } 
} 

public class Address 
{ 
    public string street1 { get; set; } 
    public string city { get; set; } 
    public string countryCode { get; set; } 
    public string country { get; set; } 
    public string postCode { get; set; } 
} 

public class Consignee 
{ 
    public Address1 address { get; set; } 
} 

public class Address1 
{ 
    public string city { get; set; } 
    public string countryCode { get; set; } 
    public string country { get; set; } 
    public string postCode { get; set; } 
} 

public class Statustext 
{ 
    public string header { get; set; } 
    public string body { get; set; } 
} 

public class Totalweight 
{ 
    public string value { get; set; } 
    public string unit { get; set; } 
} 

public class Totalvolume 
{ 
    public string value { get; set; } 
    public string unit { get; set; } 
} 

public class Assessedweight 
{ 
    public string value { get; set; } 
    public string unit { get; set; } 
} 

public class Item 
{ 
    public string itemId { get; set; } 
    public DateTime dropOffDate { get; set; } 
    public DateTime deliveryDate { get; set; } 
    public string typeOfItemActual { get; set; } 
    public string typeOfItemActualName { get; set; } 
    public string status { get; set; } 
    public Statustext1 statusText { get; set; } 
    public Statedmeasurement statedMeasurement { get; set; } 
    public Assessedmeasurement assessedMeasurement { get; set; } 
    public Event[] events { get; set; } 
    public Reference[] references { get; set; } 
    public object[] itemRefIds { get; set; } 
    public object[] freeTexts { get; set; } 
} 

public class Statustext1 
{ 
    public string header { get; set; } 
    public string body { get; set; } 
} 

public class Statedmeasurement 
{ 
    public Weight weight { get; set; } 
    public Length length { get; set; } 
    public Height height { get; set; } 
    public Width width { get; set; } 
    public Volume volume { get; set; } 
} 

public class Weight 
{ 
    public string value { get; set; } 
    public string unit { get; set; } 
} 

public class Length 
{ 
    public string value { get; set; } 
    public string unit { get; set; } 
} 

public class Height 
{ 
    public string value { get; set; } 
    public string unit { get; set; } 
} 

public class Width 
{ 
    public string value { get; set; } 
    public string unit { get; set; } 
} 

public class Volume 
{ 
    public string value { get; set; } 
    public string unit { get; set; } 
} 

public class Assessedmeasurement 
{ 
    public Weight1 weight { get; set; } 
} 

public class Weight1 
{ 
    public string value { get; set; } 
    public string unit { get; set; } 
} 

public class Event 
{ 
    public DateTime eventTime { get; set; } 
    public string eventCode { get; set; } 
    public string status { get; set; } 
    public string eventDescription { get; set; } 
    public Location location { get; set; } 
} 

public class Location 
{ 
    public string displayName { get; set; } 
    public string name { get; set; } 
    public string locationId { get; set; } 
    public string countryCode { get; set; } 
    public string country { get; set; } 
    public string postcode { get; set; } 
    public string city { get; set; } 
    public string locationType { get; set; } 
} 

public class Reference 
{ 
    public string value { get; set; } 
    public string type { get; set; } 
    public string name { get; set; } 
} 

public class Additionalservice 
{ 
    public string code { get; set; } 
    public string name { get; set; } 
} 

public class Shipmentreference 
{ 
    public string value { get; set; } 
    public string type { get; set; } 
    public string name { get; set; } 
} 
{ 
    "TrackingInformationResponse": { 
     "shipments": [{ 
      "shipmentId": "85319760154SE", 
      "uri": "/ntt-service-rest/api/shipment/85319760154SE/0", 
      "assessedNumberOfItems": 1, 
      "deliveryDate": "2016-03-22T20:35:00", 
      "estimatedTimeOfArrival": "2016-03-22T13:41:00", 
      "service": { 
       "code": "19", 
       "name": "MyPack" 
      }, 
      "consignor": { 
       "name": "H&M", 
       "address": { 
        "street1": "HULTAGATAN 47", 
        "city": "BORÅS", 
        "countryCode": "SWE", 
        "country": "Sweden", 
        "postCode": "50189" 
       } 
      }, 
      "consignee": { 
       "address": { 
        "city": "UDDEVALLA", 
        "countryCode": "SWE", 
        "country": "Sweden", 
        "postCode": "45133" 
       } 
      } 
     }] 
    } 
} 
+0

Hallo wieder Jungs. Kann jemand mich verstehen lassen öffentliche Klasse Rootobject { öffentliche Trackinginformation Antwort TrackingInformationResponse {get; einstellen; } } öffentliche Klasse Trackinginformation Antwort { öffentliche Sendung [] Sendungen {erhalten; einstellen; } –

+0

Bitte schreiben Sie die JSON-Zeichenfolge, die Sie erhalten, damit wir sehen können, was die Eingabe für die Deserialisierung ist. –

+0

Hallo, so sieht die Information aus. Alles was ich hier herausholen möchte ist die Information vom Empfänger und der geschätzte TimeOfArrival. –

Antwort

0

Wie die anderen Antworten Zustand JsonConvert.DeserializeObject<>() ist die Methode, die Sie benötigen. Danach müssen Sie nur noch die deserialisierte Datenstruktur durchlaufen.

Warum erhalten Sie NULL, nachdem Sie versuchen, deserialize, wird NULL zurückgegeben, wenn die Deserialisierung fehlschlägt. In der Regel, wenn die Daten in einem fehlerhaften Format vorliegen oder der Zeichenfall nicht übereinstimmt. Aber für das Beispiel JSON, das Sie zur Verfügung gestellt haben, wurde es für Ihre Klassen korrekt entserilisiert.

Rootobject root = JsonConvert.DeserializeObject<Rootobject>(data); 
if (root == null || 
    root.TrackingInformationResponse == null || 
    root.TrackingInformationResponse.shipments == null || 
    root.TrackingInformationResponse.shipments.Length == 0) 
{ 
    throw new Exception(); 
} 
Shipment shipment = root.TrackingInformationResponse.shipments[0]; 

if (shipment.consignee == null || shipment.consignee.address == null) 
{ 
    throw new Exception(); 
} 

Console.WriteLine("Consignee: {0}", shipment.consignee); 
Console.WriteLine("Estimated Time of Arrival: {0}", shipment.estimatedTimeOfArrival); 
+0

Vielen Dank. Ich habe nicht verstanden, dass ich Rootobject root = JsonConvert.DeserializeObject (Daten) musste; Sendungsversand = root.TrackingInformationResponse.shipments [0]; Aber es scheint, die Daten jetzt zu zeigen! –

+0

Hallo, können Sie mir erklären, wie ich es machen würde, wenn ich den Artikel [] aus der Klassensendung verwenden möchte? Da es sich um ein Array handelt, kann ich es nicht in einem Textfeld richtig anzeigen? –

0

Sie können versuchen, mit

var jarray = JsonConvert.DeserializeObject<Rootobject>(date, 
    new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-ddTHH:mm:ss" }); 
Verwandte Themen