如何在C#中将Json对象转换为数组

我正在尝试将JSON对象转换为C#数组。

这是JSon I Getfrom the Server webrequest响应:

string result = sr.ReadToEnd(); // this line get me response result = { "subjects": [{ "subject_id": 1, "subject_name": "test 1", "subject_class": 4, "subject_year": "2015", "subject_code": "t-1" },{ "subject_id": 2, "subject_name": "test 2", "subject_class": 5, "subject_year": "", "subject_code": "t-2" }] }; dynamic item = JsonConvert.DeserializeObject(result); string iii = Convert.ToString(item["subjects"]); 

我想获取主题并将它们保存在数组中,以便我可以将它们用于其他目的。

我使用这些方法但总是得到空值。

 List subject1 = (List)JsonConvert.DeserializeObject(iii, typeof(List)); 

 subjects[] subject2 = JsonConvert.DeserializeObject(iii); 

请帮我解决这个问题。

我的学科class是……

 class subjects { public int id { get; set; } public string name { get; set; } public int class_name { get; set; } public string year { get; set; } public string code { get; set; } } 

属性名称不会按原样匹配,因为主题类没有JSON对象具有的’subject_’前缀。 最简单的修复方法是更改​​您的属性名称,如Ali的回答所示。 为了防止您需要保留属性名称,您还可以使用JsonProperty属性来更改序列化名称(可能使用某种转换器有更通用的方法,但不认为需要它的属性数量)

  class subjects { [JsonProperty("subject_id")] public int id { get; set; } [JsonProperty("subject_name")] public string name { get; set; } [JsonProperty("subject_class")] public int class_name { get; set; } [JsonProperty("subject_year")] public string year { get; set; } [JsonProperty("subject_code")] public string code { get; set; } } 

如果您从不需要根主题,您也可以在没有动态或额外课程的情况下跳过它,例如:

 subjects[] arr = JObject.Parse(result)["subjects"].ToObject(); 

JObject是名称空间Newtonsoft.Json.Linq一部分)

你需要创建一个这样的结构:

 public class Subjects { public List subjects {get;set;} } public class Subject { public string subject_id {get;set;} public string subject_name {get;set;} } 

然后你应该能够做到:

 Subjects subjects = JsonConvert.DeserializeObject(result);