2016-06-27 10 views
1

Ich kann JSON Zeichenfolge mit C# nicht lesen. Ich bekomme Fehler beim Lesen.Lesen Sie Json String mit Newtonsoft C#

Json Datei

{ 
    "Invoice": { 
     "Description": "New", 
     "InvoiceTypeId": "3d166468-3923-11e6-9e7c-40e230cfb8ae", 
     "CustomerAccountsId": "TEST", 
     "InvoiceDate": "2016-06-27", 
     "PayableDate": "2016-06-27", 
     "Prefix": "A", 
     "Serial": "34222", 
     "tag": "TEST" 
    }, 
    "InvoiceLine": [ 
     { 
      "ValueId": "c41d3d85-3a1e-11e6-9e7c-40e230cfb8ae", 
      "Qantity": "3", 
      "UnitId": "a72e0dde-3953-11e6-9e7c-40e230cfb8ae", 
      "Price": "1.500,00", 
      "VatRateId": "18", 
      "LineVat": "810,00", 
      "LineTotal": "5.310,00", 
      "Vat": "00a239f1-3c3a-11e6-9e7c-40e230cfb8ae" 
     }, 
     { 
      "ValueId": "fd11b236-3952-11e6-9e7c-40e230cfb8ae", 
      "Qantity": "5", 
      "UnitId": "a72e0dde-3953-11e6-9e7c-40e230cfb8ae", 
      "Price": "1.000,00", 
      "VatRateId": "18", 
      "LineVat": "900,00", 
      "LineTotal": "5.900,00", 
      "Vat": "00a239f1-3c3a-11e6-9e7c-40e230cfb8ae" 
     } 
    ] 
} 

"Fehler beim Lesen JArray von JsonReader Aktuelle JsonReader Artikel kein Array ist.. Startobject-Pfad '', Zeile 1, Position 1"

JArray jsonVal = JArray.Parse(jsonArr) as JArray; 
dynamic vars = jsonVal; 

Aber alles richtig, ich sehe keine Fehler.

+4

Sie versuchen, eine JSON-Zeichenfolge, die kein Array ist, zu einem Array-Objekt zu deserialisieren. –

+0

Wie kann ich das lesen? – caras

+0

Erstellen Sie Ihre eigene Klasse, um diese JSON-Zeichenfolge zu deserialisieren. –

Antwort

4

Tun Sie das nicht ... Sie analysieren ein Array, wenn es sich um ein komplexes Objekt handelt.

einen Konverter wie Visual Studio oder json2csharp.com die entsprechende Zielobjekt-Struktur zu erzeugen:

public class Invoice 
{ 
    public string Description { get; set; } 
    public string InvoiceTypeId { get; set; } 
    public string CustomerAccountsId { get; set; } 
    public string InvoiceDate { get; set; } 
    public string PayableDate { get; set; } 
    public string Prefix { get; set; } 
    public string Serial { get; set; } 
    public string tag { get; set; } 
} 

public class InvoiceLine 
{ 
    public string ValueId { get; set; } 
    public string Qantity { get; set; } 
    public string UnitId { get; set; } 
    public string Price { get; set; } 
    public string VatRateId { get; set; } 
    public string LineVat { get; set; } 
    public string LineTotal { get; set; } 
    public string Vat { get; set; } 
} 

public class Invoices 
{ 
    public Invoice Invoice { get; set; } 
    public List<InvoiceLine> InvoiceLine { get; set; } 
} 

dann einfach die JsonConvert Methoden verwenden, um deserialisieren.

var parsedJson = JsonConvert.DeserializeObject<Invoices>(json); 
+3

Internet-Punkte für die Erwähnung http://json2csharp.com - Ich schwöre es, wie es mein Speck ein paar Mal gespeichert ist :) –

1

Sie können das Objekt auch zu einem dynamischen Objekt deserialisieren. Dies ist natürlich nicht ideal, aber wenn Sie nicht eine ganz neue Art für sie schaffen wollen, würde dies

var vars =JsonConvert.DeserializeObject<dynamic>( jsonArr); 
//vars.InvoiceLine 
1

ich in der Frage und einen Kommentar Sie gemacht, „Wie kann ich lesen diese bemerkt arbeiten? " Sie könnten auch beim Lesen von JSON verwirrt sein, was die Fehlermeldung verwirrend für Sie gemacht hat.

Sie versuchen, das Objekt als ein JArray zu analysieren, während Ihr JSON nicht für ein Array ist.

Wenn Sie Ihre Fehlermeldung sehen,

"Fehler beim Lesen JArray von JsonReader Aktuelle JsonReader Artikel ist kein Array.. Startobject-Pfad '', Zeile 1, Position 1"

Es wirft sofort einen Fehler auf das erste Zeichen in der ersten Zeile Ihres JSON und sagt Ihnen, es ist kein Array.

{ das erste Zeichen Ihrer JSON ist, war es ein Array, als es mit [ genau wie wenn Sie JavaScript schreiben beginnen soll.

Array:

var javaScriptArray = ["This", "Is", "An", "Array"]; 

Objekt:

var javaScriptObject = { id: 0, thisIsAnArray: false }; 

Und es zusammen:

var javaScriptArrayOfObjects = [ { id: 0, thisIsAnArray: false},{ id: 1, thisIsAnArray: false} ]; 

Sie können sehen, dass, wenn Sie in Ihrem JSON aussehen (Java Script Object Notation) sollten Sie feststellen können, ob es sich um ein Array von Objekten oder ein Objekt handelt mit Arrays.

Dies sollte Sie darauf hinweisen, dass es ein komplexes Objekt und kein Array ist und David L'Antwort deckt das perfekt ab.

Ich wollte nur berühren, um die Fehlermeldung besser zu verstehen.

+0

ja, du hast Recht. Vielen Dank – caras