C# 如何在C语言中将Json对象转换为数组#
我正在尝试将JSON对象转换为C#数组 这是我从服务器webrequest响应获取的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":
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[]>();