c# JSONConvert.DeserializeObject<List<RootObject>> returns 空值

c# JSONConvert.DeserializeObject<List<RootObject>> returns nulls

我正在尝试将 HTTPWebRequest 响应 (Json) 反序列化为 c# object/class,但遇到了问题。返回一个包含 10 个对象实例的集合,所有对象都为 null。

这里是 json:

[
{
"id":2227,
"user_id":441,
"grades":
    {"html_url":"https://...",
    "current_score":91.26,
    "current_grade":null,
    },
"sis_account_id":"11",
"user":
    {"id":441,
     "name":"Nicholas Bailey",
    }
},

这里是 类:

    public class Grade
{
    public string html_url { get; set; }
    public decimal current_score { get; set; }
    public string current_grade { get; set; }
}
public class User
{
    public int id { get; set; }
    public string name { get; set; }
}
public class Enrollment
{
    public int id { get; set; }
    public int user_id { get; set; }
    public Grade grades { get; set; }
    public string sis_account_id { get; set; }
    public User user { get; set; }
}
public class RootObject
{
    public Enrollment enrollment { get; set; }
}

这是我的代码:

  HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://(some uri)");

        WebResponse response = request.GetResponse();

        StreamReader sr = new StreamReader(response.GetResponseStream());

        string content = sr.ReadToEnd();

        JsonSerializerSettings settings = new JsonSerializerSettings();
        settings.MetadataPropertyHandling = MetadataPropertyHandling.Ignore;

        var outObject = JsonConvert.DeserializeObject<List<RootObject>>(content, settings);

我已经在 google 上查看了很多代码,但没有找到接近我的情况。另外,我对通用集合有点不感冒。代码运行良好,但在调试器中 "outObject" 包含 10 个条目,每个条目都有一个 "Enrollment" 对象,该对象为空。

我也用 json 尝试过这个,它有超过 10 个条目,但它仍然有 10 个。但我现在更关注空值(一次一件事! ).为了简洁起见,我删除了 json 中的几个条目,但主要模式(一个带有成绩对象的注册对象和一个嵌入其中的用户对象)仍然存在。

如有任何帮助,我们将不胜感激。谢谢。

反序列化为 List<Enrollment> 而不是 List<RootObject>

var enrollment = JsonConvert.DeserializeObject<List<Enrollment>>(content, settings);

根数组中的第一个 JSON 对象具有对应于 Enrollment 成员的属性 "id""user_id" 等。相反,JSON 中的任何地方都没有 属性 "enrollment"

示例 fiddle.

更新

你问了,我试过了,现在我遇到了一个异常 "Error converting value {null} to type 'System.Int32'. Path '[0].associated_user_id', line 1, position 165." associated_user_id 为简洁起见已被删除,但我会将其添加回我的代码中。有什么想法吗?

您的数据模型中的某处必须具有以下成员(字段或 属性):

public int associated_user_id;

将其更改为可为空:

public int? associated_user_id;