将 JSON 子对象转换为 Xamarin 表单中的表
Posted
技术标签:
【中文标题】将 JSON 子对象转换为 Xamarin 表单中的表【英文标题】:Convert JSON child Object to table in Xamarin Forms 【发布时间】:2021-10-04 17:11:31 【问题描述】:也许这是一个简单的问题,但我在互联网上没有找到任何解决方案。
我有以下来自 API 的 json 数据:
[
"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
]
,
]
我需要在我的 Xamarin 应用程序中使用该数据创建 2 个 SQLite 表。第一个是根节点,第二个是子节点,但是每个数据对象都包含userId,你明白吗?
目的是显示用户在某个专业领域拥有多少年的经验。
任何帮助将不胜感激。
谢谢。
【问题讨论】:
首先,使用 json2csharp.com 将 json 转换为 C# 类。然后使用这些类来构建数据模型 我做到了。创建类不是问题。它正在工作,但作为一个新的 xamarin 和 c# 开发人员,我能够在数据库中插入的唯一数据是根 json 节点。您是否有创建数据模型连接部分根和子 json 节点数据的代码示例? 发布该代码将非常有帮助 分解为两步:反序列化json,看起来已经完成,将对象保存到Sqlite,这取决于您如何创建表,定义模型以及如何插入数据。那么你使用的是 NuGet“sqlite-net-pcl”吗?请发布您的代码。 【参考方案1】:我需要在我的 Xamarin 应用程序中使用该数据创建 2 个 SQLite 表。第一个是根节点,第二个是子节点,但是每个数据对象都包含userId,你明白吗?
我做了一个示例,使用你的 xxx.json 文件,将 json 数据转换为 List 数据,你可以看看。
首先,创建两个模型类。
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;
然后foreach List在List中添加UserId
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);
【讨论】:
以上是关于将 JSON 子对象转换为 Xamarin 表单中的表的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin 应用程序 - 如何将 JSON 对象转换为图像,从 Azure SQL DB 读取
使用 System.Timers 和 Sysem.Json 的 Xamarin 表单错误