【问题标题】:How to Convert Json Object to Array in C#如何在 C# 中将 Json 对象转换为数组
【发布时间】:2015-09-21 15:02:35
【问题描述】:

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

这是我从服务器 webrequest 响应中获取的 JSon:

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# arrays json


【解决方案1】:

属性名称不会按原样匹配,因为您的主题类没有 JSON 对象具有的“主题_”前缀。最简单的解决方法是更改​​您的属性名称,如 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<subjects[]>();

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • ... 如果您需要将数据从这里移动到其他数据结构中,例如一个数组,那么您需要编写逻辑来单独执行此操作。 JSON 为您获取值,解码该 JSON 获取包含这些值的动态数据结构。你对这些值做什么完全取决于你:JSON 已经完成了它的部分。
    • 答案提供了强类型对象,所以你应该在转换之前声明对象类型。我强烈建议这样做。但您可以将 json 转换为 dynamic 类型:看看这个页面:newtonsoft.com/json/help/html/QueryJsonDynamic.htm
    • 是的。我同意与你。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多