【问题标题】:Convert JSON child Object to table in Xamarin Forms将 JSON 子对象转换为 Xamarin 表单中的表
【发布时间】: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”吗?请发布您的代码。

标签: json sqlite xamarin.forms


【解决方案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);
                        }
                       
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 2016-10-15
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      • 2018-05-01
      相关资源
      最近更新 更多