2016-07-13 2 views
1

Привет, ребята, у меня эта ошибка при отладке моего приложения, Я пытаюсь загрузить данные из базы данных sql, форматируя ее в строке json, Я хочу создать (B1) (B2) (B3) (B4).Ошибка разработки Newtonsoft.json на студии xamarin

массив a1 = {b1, b2, b3} массив a2 = {b1, b2, b3} и так далее ..

но этот код не работает, у меня есть эта ошибка:

Newtonsoft.json.jsonreaderexeption был брошен ошибка разбора логического значения. путь 'Пьятти [0] .disponibilita', строка 9, позиция 21

я прошу прощения за мой плохой английский

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; 

     } 

Вот Consolle журнала печати 'значение'

'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

Что такое piatti [0] .disponsibilita? это значение true/false? –

+0

Как @AdamWeitzman предлагает, пожалуйста, отправьте образец данных. –

+0

отредактировал @MarkLarter –

ответ

1

Ваша проблема может заключаться в том, что 'gluten_free' : 'false' возвращает строковое значение, где ожидается логическое значение ... так что должно быть 'gluten_free' : false вместо этого ... попробуйте использовать более сильный десериализатор, такой как microsoft, здесь: https://msdn.microsoft.com/en-us/library/tz8csy73(v=vs.110).aspx и i е, что не работает, вы можете попробовать вручную переключая значение на возвращение

вероятно, проще всего сделать, это обратиться к public bool gluten_free { get; set; }public string gluten_free { get; set; } тем более, что это происходит для всех ваших объектов

0

Проблема заключается в вашем JSON , он не хорошо отформатирован.

Вот что случилось:

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

Там в Запятой после "true" в "disponibilita". Это должно быть нормально Запятая (Создание свойства объекта, как и для всех других объектов).

Как указано Adam, также существует разница между вашим истинным и «ложным» (с кавычками и без него) в JSON. Хотя я бы предпочел это без кавычек, я думаю, что сериализатор будет правильно разбирать это (строка для логического преобразования).

Нижняя линия, выход JSON ошибочен. Вы можете проверить его с помощью валидатора JSON like this one. Удачи!

Смежные вопросы