我正在尝试将 JSON 对象转换为 C# 数组。
这是我从服务器 Web 请求响应获取的 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"]);
Run Code Online (Sandbox Code Playgroud)
我想获取主题并将它们保存在数组中,以便我可以将它们用于其他目的。
我将这些用于方法,但总是得到空值。
List<subjects> subject1 = (List<subjects>)JsonConvert.DeserializeObject(iii, typeof(List<subjects>));
Run Code Online (Sandbox Code Playgroud)
和
subjects[] subject2 = JsonConvert.DeserializeObject<subjects[]>(iii);
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题。
我的科目是..
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; }
}
Run Code Online (Sandbox Code Playgroud)
属性名称不会按原样匹配,因为您的主题类没有 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; }
}
Run Code Online (Sandbox Code Playgroud)
如果您从不需要根主题,您也可以跳过它,而无需动态或额外的课程,例如:
subjects[] arr = JObject.Parse(result)["subjects"].ToObject<subjects[]>();
Run Code Online (Sandbox Code Playgroud)
(JObject是命名空间的一部分Newtonsoft.Json.Linq)
| 归档时间: |
|
| 查看次数: |
33915 次 |
| 最近记录: |