#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);
}
}
}