Преобразование дочернего объекта JSON в таблицу в формах Xamarin

#json #sqlite #xamarin.forms

Вопрос:

может быть, это простой вопрос, но я не нашел никакого решения в Интернете.

У меня есть следующие данные json, полученные из API:

 [
    {
        "userId": "6ba8da0c-b307-40b6-b858-5fb1b880d473",
        "nomeCompleto": "João da Silva Jr.",
        "cpf": "12345678910",
        "nomePai": "João da Silva",
        "nomeMae": "Maria da Silva",
        "casado": true,
        "profissao": [
            {
                "profissaoId": "3B85BE83-9B4E-4B15-9EB2-68363936CA13",
                "anosDeExperiencia": 8
            }
        ]
    }, 
    {
        "userId": "b2a2f414-742d-47d5-a0f4-52f1f9849687",
        "nomeCompleto": "Manuel de Souza",
        "cpf": "12345678910",
        "nomePai": "Joaqui de Souza",
        "nomeMae": "Maria Joaquina de Souza",
        "casado": true,
        "profissao": [
            {
                "profissaoId": "3B85BE83-9B4E-4B15-9EB2-68363936CA15",
                "anosDeExperiencia": 8
            }
        ]
    }, 
    {
        "userId": "64549488-5530-4975-8ea9-0f208aa4118d",
        "nomeCompleto": "Yasmin Paulino",
        "cpf": "12345678910",
        "nomePai": "Francisco Paulino",
        "nomeMae": "Joyce Gudowisk",
        "casado": false,
        "profissao": [
            {
                "profissaoId": "3B85BE83-9B4E-4B15-9EB2-68363936CA09",
                "anosDeExperiencia": 3
            },
            {
                "profissaoId": "3B85BE83-9B4E-4B15-9EB2-68363936CA19",
                "anosDeExperiencia": 1
            }
        ]
    }, 
    {
        "userId": "6ba8da0c-b307-40b6-b858-5fb1b880d471",
        "nomeCompleto": "João da Silva Neto.",
        "cpf": "12345678910",
        "nomePai": "João da Silva Jr.",
        "nomeMae": "Maria Antonieta",
        "casado": true,
        "profissao": [
            {
                "profissaoId": "3B85BE83-9B4E-4B15-9EB2-68363936CA10",
                "anosDeExperiencia": 8
            },
            {
                "profissaoId": "3B85BE83-9B4E-4B15-9EB2-68363936CA11",
                "anosDeExperiencia": 3
            },
            {
                "profissaoId": "3B85BE83-9B4E-4B15-9EB2-68363936CA12",
                "anosDeExperiencia": 1
            }
        ]
    }, 
]
 

Мне нужно создать 2 таблицы SQLite с этими данными в моем приложении Xamarin. Первый из корневого узла, а второй с дочерним узлом, но включая идентификатор пользователя для каждого объекта данных, вы понимаете?

Цель состоит в том, чтобы показать, сколько лет опыта у пользователя в той или иной профессии.

Любая помощь будет оценена по достоинству.

Спасибо.

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

1. во-первых, используйте json2csharp.com чтобы перевести json в классы C#. Затем используйте эти классы для построения модели данных

2. Я сделал это. создать классы — это не проблема. Это работает, но, как новый разработчик xamarin и c#, единственными данными, которые я смог вставить в базу данных, был корневой узел json. У вас есть пример кода, создающего модель данных, объединяющую часть данных корневого и дочернего узлов json?

3. публикация этого кода была бы чрезвычайно полезна

4. Разбейте его на два шага: десериализуйте json, что, по-видимому, сделано, и сохраните объект в Sqlite, что зависит от того, как вы создаете таблицу, определяете модель и как вставляете данные. Итак, вы используете NuGet «sqlite-net-pcl»? И, пожалуйста, опубликуйте свой код.

Ответ №1:

Мне нужно создать 2 таблицы SQLite с этими данными в моем приложении Xamarin. Первый из корневого узла, а второй с дочерним узлом, но включая идентификатор пользователя для каждого объекта данных, вы понимаете?

Я делаю один пример, который, используя ваш файл xxx.json, преобразует данные json в данные списка<>, вы можете посмотреть.

Во-первых, создайте два класса моделей.

  public class UserModel
{
    public string userId { get; set; }
    public string nomeCompleto { get; set; }
    public string cpf { get; set; }
    public string nomePai { get; set; }
    public string nomeMae { get; set; }
    public bool casado { get; set; }
    public List<Prof> profissao { get; set; }

}
public class Prof
{
    public string profissaoId { get; set; }
    public string userId { get; set; }
    public int anosDeExperiencia { get; set; }
}
 

Затем передайте список, чтобы добавить идентификатор пользователя в список

  private void getdata()
    {
        List<UserModel> users = new List<UserModel>();
        List<Prof> profs = new List<Prof>();
        var assembly = typeof(listviewsample.Page24).GetTypeInfo().Assembly;
        Stream stream = assembly.GetManifestResourceStream("FormsSample.user.json");
        using (var reader = new System.IO.StreamReader(stream))
        {
            var jsonString = reader.ReadToEnd();

            //Converting JSON Array Objects into generic list               
            users = JsonConvert.DeserializeObject<List<UserModel>>(jsonString);   
           foreach(UserModel user in users)
            {
                if((user.profissao).Count>0)
                {        
                   foreach(Prof prof in user.profissao)
                    {
                        prof.userId = user.userId;
                        profs.Add(prof);
                    }
                   
                }
            }

           
        }
    }
}
 

Ответ №2:

Спасибо, Черри. Вот чего мне не хватало в моем коде (см. Ниже). Это сработало идеально.

 foreach(UserModel user in users)
            {
                if((user.profissao).Count>0)
                {        
                   foreach(Prof prof in user.profissao)
                    {
                        prof.userId = user.userId;
                        profs.Add(prof);
                    }
                   
                }
            }