c# - 有没有更简单的方法来访问 Jarray 中的 Json 对象值

标签 c# json json.net

好的,所以我刚刚开始学习 c#,我正在重新创建一个我用 python 编写的程序,它使用 api 提取学生记录并使用 json 数据创建新的用户帐户。

现在我知道 python 有很多“神奇”的特性,而且它被设计成快速和简单的。但是我必须有一种更简单的方法来访问 c# 中的 json 对象值

一个用 Python 编写的示例,用于为入学日期 = 今天我只需要的学生过滤我的数据

for st in student:  # for every student, if DateOfEntry = today add to csv file
if (st['DateOfEntry'])[:10].strip() == today.strftime('%d/%m/%Y'):

现在在 C# 中从我在 Jarray 上在线找到的资源访问我需要做这样的事情

JArray students = JArray.Parse(response.Content);

foreach (JObject student in students.Children<JObject>())
    {
    foreach (JProperty studentProperty in student.Properties())
        {
        string propertyName = studentProperty.Name;
        if (propertyName.Equals("DateOfEntry"))
            {
            string propertyValue = (string)studentProperty.Value;
            //Console.WriteLine("Name: {0}, Value: {1}", propertyName, propertyValue);
            if (propertyValue.Equals(today.ToString("dd/MM/yyyy HH:mm:ss")))
                {
                }

现在我想通过选择某些关键值(即姓名、ID、年份等)来创建学生详细信息列表

在 python 中,它就像将以下内容放在前面的 if 语句中一样简单

stu = (
        st['Forename']+' '+ st['Surname']+'<br><br>',
      )
    newstudents.append(stu)

但在我当前的 C# 设置中,我可能不得不重新迭代 studentpoperty 或添加更多 if 语句来检索我想要的属性值。

这感觉笨拙而且不对,如果我学到了什么“如果感觉不对,那么你可能做错了”

我想知道此时将 JSON 解析为 JArray 是否是正确的做法,或者是否有更简单的方法来访问键和值?

最佳答案

您是否尝试过使用 Json NewtonSoft,它将大大简化您的 Json 的反序列化,然后再使用您的学生列表。 Linq 在您的情况下会很方便,但它仅适用于 C# 3.0。

我给你一个使用 NewtonSoft 的简单例子(接受 Nuget 包)。

class Program
{
    static void Main(string[] args)
    {
        MyClass object1 = new MyClass(1, "A", new DateTime(2019, 1, 1));
        MyClass object2 = new MyClass(2, "B", new DateTime(2019, 1, 2));

        List<MyClass> myList = new List<MyClass>();
        myList.Add(object1);
        myList.Add(object2);

        string json = JsonConvert.SerializeObject(myList);
        List<MyClass> objectAfterJson = JsonConvert.DeserializeObject<List<MyClass>>(json);

        int id = objectAfterJson[0].Id;
    }
}

class MyClass
{
    public int Id;
    public string Name;
    public DateTime Date;

    public MyClass(int id, string name, DateTime date)
    {
        Id = id;
        Name = name;
        Date = date;
    }
}

关于c# - 有没有更简单的方法来访问 Jarray 中的 Json 对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56597305/

相关文章:

c# - 自定义 JsonConverter WriteJson 不会改变子属性的序列化

c# - VS 2013 Quick Find 在切换到我的应用程序时失去焦点 - 如何以编程方式保存/恢复它?

c# - 从列表中获取不同的值

c# - 通用类型 JsonConvert.DeserializeObject<List<T>>(string)

javascript - 移动应用程序解析登录结果

python - 如何使具有内部类 JSON 的类可序列化

c# - Json.NET 即使使用默认设置也将枚举序列化为字符串

c# 使用 DataGridView 中的组合框修改 Mysql 中的单元格

c# - 没有逆属性的多对多

json - 从 powershell 中的 JSON 对象中删除一个属性