Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C语言中将Json对象转换为数组#_C#_Arrays_Json - Fatal编程技术网

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

C# 如何在C语言中将Json对象转换为数组#,c#,arrays,json,C#,Arrays,Json,我正在尝试将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":

我正在尝试将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"]);

您需要创建如下结构:

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

public class Subject
{
    public string subject_id {get;set;}
    public string subject_name {get;set;}
}
公共课科目
{
公共列表主题{get;set;}
}
公共课科目
{
公共字符串subject_id{get;set;}
公共字符串subject_name{get;set;}
}
那么你应该能够做到:

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

属性名称将不匹配,因为subjects类没有JSON对象的“subject”前缀。最简单的解决办法是改变你的财产名称,如阿里的回答所示。为了防止您需要保持属性名称不变,您还可以使用
JsonProperty
属性来更改序列化名称(也许有一种更通用的方法,使用某种转换器,但并不认为需要多少属性)

如果您从不需要根主题,您也可以跳过它,而不需要动态或额外的类,例如:

subjects[] arr = JObject.Parse(result)["subjects"].ToObject<subjects[]>();
subjects[]arr=JObject.Parse(结果)[“subjects”].ToObject();

JObject
是名称空间
Newtonsoft.Json.Linq
)的一部分。。。如果您需要将数据从这个数据结构移动到其他数据结构中,例如数组,那么您需要编写逻辑来分别执行此操作。JSON向您获取值,解码JSON将获得包含这些值的动态数据结构。如何处理这些值完全取决于您:JSON已经完成了它的部分工作。答案是提供强类型对象,因此您应该在转换之前声明对象类型。我强烈建议这样做。但是,您可以将json转换为
动态
类型:查看此页面:是。我同意你的意见。:-)
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);
    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[]>();