2016-07-13 8 views
1

Hei Jungs, ich habe diesen Fehler beim Debuggen meiner App, Ich versuche, Daten aus einer SQL-Datenbank, die es in einem JSON-String formatieren, Ich möchte eine erstellen Array von Elementen (A), die seine Informationen enthält (B1) (B2) (B3) (B4) ..Newtonsoft.json Fehler Entwicklung auf Xamarin Studio

Array a1 = {b1, b2, b3} Array a2 = {b1, b2, b3} und so weiter ..

aber dieser Code nicht funktioniert, ich habe diesen Fehler:

Newtonsoft.json.jsonreaderexeptiongeworfen wurdeFehler bei der Analyse des booleschen Werts. Pfad 'piatti [0] .disponibilita', Zeile 9, Position 21

Es tut mir leid für mein schlechtes Englisch

public class piatto //NOME DELL'ELEMENTO RIPETUTO 
     { 
      public List<piatto_details> piatti { get; set; } 
     } 

     public class piatto_details //DETTAGLI DELL'ELEMENTO 
     { 
      public string categoria { get; set;} 
      public string nome { get; set; } 
      public string prezzo { get; set; } 
      public string dettagli { get; set; } 
      public string img_url { get; set; } 

      public bool disponibile { get; set; } 
      public bool gluten_free { get; set; } 

     } 

     public string[,] GetTable(string url, int details) 
     { 
      string[,] lista_piatti; 
      lista_piatti = new string[,] { }; 

      WebClient client = new WebClient(); 

      string value = client.DownloadString(url); 
      Console.WriteLine(value); 

      piatto piatt = JsonConvert.DeserializeObject<piatto>(value); 

      int i = 0; 
      int j = 0; 

      foreach (var item in piatt.piatti) 
       { 
        for (j = 0; j < details; j++) 
        { 
         switch (j) 
         { 
          case 0: 
          lista_piatti[i, j] = item.categoria; 
          break; 
          case 1: 
          lista_piatti[i, j] = item.nome; 
          break; 
          case 2: 
          lista_piatti[i, j] = item.prezzo; 
          break; 
          case 3: 
          lista_piatti[i, j] = item.dettagli; 
          break; 
          case 4: 
          lista_piatti[i, j] = item.img_url; 
          break; 
          case 5: 
          lista_piatti[i, j] = Convert.ToString(item.disponibile); 
          break; 
          case 6: 
          lista_piatti[i, j] = Convert.ToString(item.gluten_free); 
          break; 
          default: 
          Console.WriteLine("Error while switching details"); 
          break; 
         } 
        } 
        j = 0; 
        i++; 
       } 

      return lista_piatti; 

     } 

Hier ist die consolle Protokolldruck 'Wert'

'piatti':[ 
    { 
     'categoria':'primi', 
     'nome':'pasta al bue', 
     'prezzo':'26', 
     'dettagli': 'il bue si chiamava rosario il bue dromedario', 
     'img_url': 'http://www.google.it', 
     'disponibilita': true; 
     'gluten_free' : 'false'; 

    }, 
     { 
     'categoria':'primi', 
     'nome':'pasta alla gallina', 
     'prezzo':'21', 
     'dettagli': 'la gallina rosita, morta purtroppo', 
     'img_url': 'http://www.google.it', 
     'disponibilita': false; 
     'gluten_free' : 'true'; 

    }, 
     { 
     'categoria':'secondi', 
     'nome':'gallina rosita', 
     'prezzo':'210', 
     'dettagli': 'l'altro pezzo della gallina rosita', 
     'img_url': 'http://www.google.it', 
     'disponibilita': true; 
     'gluten_free' : 'true'; 

    } 

    ] 
} 
+1

Wie sieht piatti [0] .disponsibilita aus? ist es ein wahrer/falscher Wert? –

+0

Wie @AdamWeitzman empfiehlt, senden Sie bitte eine Datenprobe. –

+0

bearbeitet @MarkLarter –

Antwort

1

Ihr Problem kann sein, dass 'gluten_free' : 'false' einen String-Wert zurückgibt, wo ein Boolean erwartet wird ... so sollte 'gluten_free' : false statt ... versuchen Sie mit einem stärkeren Deserializer wie der Microsoft One hier: https://msdn.microsoft.com/en-us/library/tz8csy73(v=vs.110).aspx und ich f, die Sie funktioniert nicht versuchen, den Wert Schalten von Hand auf die Rückkehr

wahrscheinlich einfachste Sache zu tun ist public bool gluten_free { get; set; }-public string gluten_free { get; set; } drehen zumal dies ist für jeden Ihrer Objekte geschieht

0

Das Problem in Ihrem JSON Es ist nicht gut formatiert.

Hier ist, was falsch ist:

'img_url': 'http://www.google.it', 
'disponibilita': true; 
'gluten_free' : 'false'; 

Es gibt eine Semikolons nach "true" at "disponibilita". Das sollte ein normaler Komma (Making es eine Eigenschaft aus dem Objekt, genau wie alle anderen Eigenschaften).

Wie Adam darauf hingewiesen, gibt es auch einen Unterschied zwischen Ihrer wahren und "falsch" (mit und ohne Anführungszeichen) in der JSON. Obwohl ich es ohne Anführungszeichen bevorzugen würde, denke ich, dass der Serialiser dies korrekt analysieren würde (String zu boolescher Konvertierung).

Bottomline, der JSON-Ausgang ist falsch. Sie können es mit einem JSON-Validator like this one validieren. Viel Glück!