MAUI MVVM - 如何将从 NOSQL 返回的数据填充到 CollectionView 中

问题描述 投票:0回答:1

在我的项目中,我们的后端以 JSON 对象的形式发送学生数据。我必须创建一个模型来膨胀该数据,并创建一个

ViewModel
使其具有反应性。我正在使用
Communitytoolkit.MVVM
。从服务器返回的数据如下所示:

[
    {
        "id": "6a49c6de7634f86e8cadcae2",
        "firstName": "Suresh",
        "lastName": "Oberoi",
        "photo": "https://nagpur-s3-bucket.s3.amazonaws.com/Ss4KAD04Byb4SsmGr5kSOQ4S7XZRhQ.jpeg",
        "graduated": false,
        "coursesTaken": {
            "id": "7a5cc6db90d9e78f630178ae",
            "name": "Intro to DB",
            "semester": "Fall 2020",
            "teacher": {
                "id": "7a5cc6db90d9e78f630178ae",
                "firstName": "Chulbul",
                "lastName": "Pandey",
                "teacherImage": "chulbul.jpeg"
             },
        },
    },
    { /* More documents in same pattern as above */ }
]

由此我必须创建所需的模型和 ViewModel。

我有以下问题:

  1. 我可以创建一个包含类似内容的简单模型吗:

     public class Student {
         public string Id {get, set};
         public string firstName {get, set};
         public string lastName {get, set};
         public string photo {get set);
         public bool graduated {get, set},
         List<Course) coursesTaken {get; set};
     }
    
    1. 如果是,如何使用 )bservablecollection 将
      Student
      模型与视图模型绑定?
navigation maui community-toolkit-mvvm
1个回答
0
投票

您的类定义与您的 Json 数据不匹配。代码

List<Course) coursesTaken {get; set};
是一个列表,而json字符串是一个对象。

        "coursesTaken": {
        "id": "7a5cc6db90d9e78f630178ae",
        "name": "Intro to DB",
        "semester": "Fall 2020",
        "teacher": {
            "id": "7a5cc6db90d9e78f630178ae",
            "firstName": "Chulbul",
            "lastName": "Pandey",
            "teacherImage": "chulbul.jpeg"
         }

如果您希望变量

coursesTaken
成为列表,则需要在内部json字符串之外添加
[]

 [
  {
    "id": "6a49c6de7634f86e8cadcae2",
    "firstName": "Suresh",
    "lastName": "Oberoi",
    "photo": "https://nagpur-s3-bucket.s3.amazonaws.com/Ss4KAD04Byb4SsmGr5kSOQ4S7XZRhQ.jpeg",
    "graduated": false,
    "coursesTaken": [
      {
        "id": "7a5cc6db90d9e78f630178ae",
        "name": "Intro to DB",
        "semester": "Fall 2020",
        "teacher": {
          "id": "7a5cc6db90d9e78f630178ae",
          "firstName": "Chulbul",
          "lastName": "Pandey",
          "teacherImage": "chulbul.jpeg"
        }
      },

      {
        "id": "7a5cc6db90d9e78f630178ae",
        "name": "Intro to DB",
        "semester": "Fall 2020",
        "teacher": {
          "id": "7a5cc6db90d9e78f630178ae",
          "firstName": "Chulbul",
          "lastName": "Pandey",
          "teacherImage": "chulbul.jpeg"
        }
      }
    ]
  }     
]

并且您还需要检查变量

teacher
List
还是普通对象。确保Json数据与实际定义的数据类型一致,否则数据将无法解析成功。

假设Json数据就像我上面发布的那样,你可以像下面这样定义代码:

public class Student
{
    public string id { get; set; }

    public string firstName { get; set; }

    public string lastName { get; set; }

    public string photo { get; set; }

    public bool graduated { get; set; }

    public  List<Course> coursesTaken { get; set; } = new List<Course>();

     //public Course coursesTaken { get; set; }

}

public class Course
{

    public string id { get; set; }

    public string name { get; set; }

    public string semester { get; set; }

    //public  List<Teacher> teacher { get; set;} = new List<Teacher>();

    public Teacher teacher { get; set; }
}

public class Teacher
{

    public string id { get; set; }
    public string firstName { get; set; }
    public string lastName { get; set; }
    public string teacherImage { get; set; }
}

然后你可以使用方法

JsonConvert.DeserializeObject<List<Student>>(jsonstr);
将json转换为
List<Student> StudentsList;

© www.soinside.com 2019 - 2024. All rights reserved.