Newtonsoft.json错误开发xamarin工作室

时间:2016-07-13 13:31:26

标签: c# json xamarin xamarin.ios

嘿伙计们,我在调试我的应用时出现此错误, 我试图从sql数据库下载数据,将其格式化为json字符串, 我想创建一个元素数组(A),其中包含他的信息(B1)(B2)(B3)(B4)..

数组a1 = {b1,b2,b3} 数组a2 = {b1,b2,b3}等等..

但是这段代码不起作用,我有这个错误:

已经抛出了Newtonsoft.json.jsonreaderexeption 解析布尔值时出错。路径' piatti [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日志打印&#39;

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

     }

    ] 
 }

2 个答案:

答案 0 :(得分:1)

您的问题可能是'gluten_free' : 'false'返回一个字符串值,其中需要一个布尔值...所以应该是'gluten_free' : false而是...尝试使用像这里的微软一个更强的反序列化器: https://msdn.microsoft.com/en-us/library/tz8csy73(v=vs.110).aspx如果这不起作用,您可以尝试在返回时手动切换值

最简单的事情就是将public bool gluten_free { get; set; }转为public string gluten_free { get; set; },特别是因为对象的每个人都会发生这种情况

答案 1 :(得分:0)

问题出在您的JSON中,格式不正确。

这是错的:

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

true”之后的“disponibilita”后面有分号。这应该是正常的逗号(将其作为对象的属性,就像所有其他属性一样)。

就像Adam所指出的那样,JSON中的true和'false'(有和没有引号)之间也存在差异。虽然我更喜欢它没有引号,但我认为序列化器会正确解析它(字符串到布尔转换)。

Bottomline,JSON输出错误。您可以使用JSON验证程序like this one对其进行验证。祝你好运!