将 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 表单错误

如何在xamarin表单中动态保存文件

在 Xamarin 中将 json 字符串转换为 .NET 对象

将表单数据数组对象转换为 JSON [重复]

Google Closure - 将数据表单数据转换为 json 对象