Синтаксический анализ строки json для класса, заполняющего его подклассы

#c# #json #jsonconvert

#c# #json #jsonconvert

Вопрос:

Я вернул эту строку в свой код:

 string json = "[[{'nome':'joe','cpf':'54'},{'id':'8','nome':'Legendagem','valor':'5'}],[{'nome':'jane','cpf':'22'},{'id':'1','nome':'Legendagem2','valor':'6'}]]";
 

и у меня есть 3 класса:

 public class ItemCart
{
    public UserCart user { get; set; }
    public CursoCart curso { get; set; }
}


public class UserCart
{
    public string nome { get; set; }
    public string email { get; set; }
    public string cpf { get; set; }
}

public class CursoCart
{
    public string id { get; set; }
    public string desc { get; set; }
    public string valor { get; set; }
}
 

я хочу, чтобы класс класса UserCart / CursoCart был заполнен, чтобы я мог выполнять цикл внутри itemCart и получать значения, длину и т. Д. Элементов UserCart / CursoCart
, например:

 UserCart user1 = itemCart[0].user;
 

предположим, что я не могу изменить строку, я пытаюсь преобразовать это, но теперь работаю:

 List<ItemCart> itemCart = JsonConvert.DeserializeObject<List<ItemCart>>(json);
 

спасибо за любую помощь.

Комментарии:

1. просто создайте класс, который имеет свойства из обоих UserCart CursoCart классов и, а затем используйте JsonConvert.DeserializeObject<List<UserOrCursoCart[]>>(json) … десериализатор не может угадать тип на основе существования свойства…

2. спасибо @Selvin, принял приведенное ниже (потому что пример), но ваше понимание было правильным, указывающим на то же направление (имея только один класс)

Ответ №1:

Как я вижу из вашего json, это массив. Следующая таблица элементов и десериализация могут вам подойти.

 public class Program
{
    public static void Main()
    {
        string json = "[[{'nome':'joe','cpf':'54'},{'id':'8','nome':'Legendagem','valor':'5'}],[{'nome':'jane','cpf':'22'},{'id':'1','nome':'Legendagem2','valor':'6'}]]";
        var ItemCartList = JsonConvert.DeserializeObject<List<Item[]>>(json);

    }
}

public class ItemCart
{
    public Item[][] ItemList { get; set; }
}

public class Item
{
    public string nome { get; set; }
    public string cpf { get; set; }
    public string id { get; set; }
    public string valor { get; set; }
}