【发布时间】:2017-03-18 04:25:38
【问题描述】:
我正在尝试将 HTTPWebRequest 响应 (Json) 反序列化为 c# 对象/类,但遇到了麻烦。返回一个包含 10 个对象实例的集合,并且所有对象都为空。
这是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”对象。
我也尝试过使用具有 10 多个条目的 json 进行此操作,但它仍然会出现 10 个。但我现在更关注空值(一次一件事!)。为简洁起见,我删除了 json 中的几个条目,但主要模式(一个包含成绩对象和嵌入其中的用户对象的注册对象)仍然存在。
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
您是否为所有类添加了“Serializable”属性?
-
@AkshayMahajan Json.NET 不依赖于
Serializable属性。Serializable影响二进制序列化。 -
为了好玩,只需序列化为动态并删除 DTO
标签: c# json.net generic-collections