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

本文关键字:对象 转换 数组 Json 中将 | 更新日期: 2023-09-27 18:01:01

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

这是JSon I从服务器获取的Web请求响应:

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<object>(result);  
string iii = Convert.ToString(item["subjects"]);

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

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

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

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

请帮我解决这个问题。

我的科目是…

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; }
}

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

属性名称不会按原样匹配,因为subjects类没有JSON对象的"subject_"前缀。最简单的解决方法是更改您的房产名称,如阿里的回答所示。为了防止您需要保持属性名称的原样,您还可以使用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<subjects[]>();

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

您需要创建这样的结构:

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

然后你应该能够做到:

Subjects subjects = JsonConvert.DeserializeObject<Subject>(result);