Десериализовать JSON в C# для массива и повторения - PullRequest
0 голосов
/ 09 апреля 2020

Мне нужна помощь, чтобы узнать, что я делаю неправильно, у меня мало времени для работы с c#. Я не могу перебрать json, я использую RestSharp и Newtonsoft. Json. В сообщении говорится: *

"'Невозможно десериализовать текущий массив JSON (например, [1,2,3]) в тип' ConsoleApp1.Libro ', так как тип требует объект JSON (например, {"name": "value"}) для правильной десериализации. Чтобы исправить эту ошибку, измените JSON на JSON объект (например, {"name": "value"}) или измените десериализованный тип на массив или тип, который реализует интерфейс коллекции (например, ICollection, IList), например List, который можно десериализовать из массива JSON. "

, если я распечатываю ответ. Содержимое возвращает правильный json, но я не могу повторить это с foreach

namespace ConsoleApp1
{
    public class Libro
    {
        public int id { get; set; }
        public string id_categoria { get; set; }
        public string tipo { get; set; }
        public string ruta { get; set; }
        public string autor { get; set; }
        public int estado { get; set; }
        public string titulo { get; set; }
        public string titular { get; set; }
        public int size { get; set; }
        public string detalles { get; set; }
        public double precio { get; set; }
        public string portada { get; set; }
        public int ventas { get; set; }
        public int oferta { get; set; }
        public double precioOferta { get; set; }
        public int entrega { get; set; }
        public string fecha { get; set; }
    }

    public class Cate
    {
        public int id { get; set; }
        public string categoria { get; set; }
        public string ruta { get; set; }
        public int estado { get; set; }
        public int oferta { get; set; }
        public int precioOferta { get; set; }
        public int descuentoOferta { get; set; }
        public string imgOferta { get; set; }
        public string finOferta { get; set; }
        public string fecha { get; set; }
        public IList<Libro> libros { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("mostrar registros");
            var client = new RestClient("myurl");
            client.Timeout = -1;
            var request = new RestRequest(Method.GET);
            IRestResponse response = client.Execute(request);
            var resultado = new Libro();
            resultado = JsonConvert.DeserializeObject<Libro>(response.Content); /*(here is the error)*/

            foreach (var item in resultado.titulo)
            {
                Console.WriteLine(item);
            }

        }
    }
}

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Дайте это go:

Libro[] resultados = JsonConvert.DeserializeObject<Libro[]>(response.Content);

foreach (var resultado in resultados)
    foreach (var item in resultado.titulo)
        Console.WriteLine(item);
0 голосов
/ 09 апреля 2020

Если в вашем ответе есть квадратные скобки. Содержание, которое может вызвать проблему. Если это так, либо попробуйте:

resultado  = JSON.Deserialize<Libro>(response.Content.Substring(1, response.Content.Length-2));

, либо вы можете также десериализовать в списке и использовать нулевой индекс, чтобы получить первый. Что-то вроде:

var resultadoList   = JSON.Deserialize<List<Libro>>(response.Content);
resultado = resultadoList[0];

или

var resultadoList   = JSON.Deserialize<List<Libro>>(response.Content);
resultado = resultadoList.FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...