我想将我的json对象反序列化为我的学生类
var result = JsonConvert.DeserializeObject<Student>(data);
我的json数据
{
"student":{
"fname":"997544",
"lname":"997544",
"subject":"IT",
"grade":"F"
}
}
我的学生班
[Serializable]
public class Student
{
[JsonProperty("fname")]
public string FirstName{ get; set; }
[JsonProperty("lname")]
public string LastName{ get; set; }
[JsonProperty("subject")]
public string Subject { get; set; }
[JsonProperty("grade")]
public string Grade { get; set; }
}
代码不起作用,错误说:
无法将当前JSON对象(例如{“name”:“value”})反序列化为类型 因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。
答案 0 :(得分:5)
您的JSON字符串当前表示一个名为Student的内部对象属性的对象。如果要反序列化到Student对象,则JSON字符串应如下所示:
Manifest.xml
如果更改你的JSON并不容易,你也可以使用JObject来帮助你这样做:
{
"fname":"997544",
"lname":"997544",
"subject":"IT",
"grade":"F"
}
或者正如其他人指出的那样,您可以简单地创建另一个类包装器并直接反序列化。
答案 1 :(得分:2)
因为你试图从JSON处理对象,所以最简单的方法是从
开始var jStudent = JObject.Parse(jsonData);
然后,您可以通过键引用转到JObject的任何子属性,并按预期反序列化。
var student = JsonConvert.DeserializeObject<Student>(jStudent["student"].ToString());
希望有所帮助
答案 2 :(得分:1)
如果你必须使用你下载的json,那么你需要创建另一个模型 为它而上课
[Serializable]
public class Student
{
[JsonProperty("fname")]
public string FirstName{ get; set; }
[JsonProperty("lname")]
public string LastName{ get; set; }
[JsonProperty("subject")]
public string Subject { get; set; }
[JsonProperty("grade")]
public string Grade { get; set; }
}
[Serializable]
public class NewModel
{
public Student Student { get; set; }
}
然后反序列化
var result = JsonConvert.DeserializeObject<NewModel>(data);
答案 3 :(得分:1)
由于您无法更改Json字符串,因此需要修改类结构以匹配它。请注意,student
对象包含在另一个类中。使用此Json数据的类结构如下所示:
public class Wrapper
{
public Student Student { get; set; }
}
public class Student
{
[JsonProperty("fname")]
public string FirstName { get; set; }
[JsonProperty("lname")]
public string LastName { get; set; }
[JsonProperty("subject")]
public string Subject { get; set; }
[JsonProperty("grade")]
public string Grade { get; set; }
}
并像这样反序列化:
var wrapper = JsonConvert.DeserializeObject<Wrapper>(data);
答案 4 :(得分:1)
您的JSON对象位于无名 Root / Parent 对象中。
所以请使用以下内容。
var result = JsonConvert.DeserializeObject<RootObject>(data);
然后您的Student
实例可以result.student
例如:
string firstName = result.student.FirstName;
我使用Json2CSharp生成额外的RootObject
类。
这里是所有类定义
[Serializable]
public class Student
{
[JsonProperty("fname")]
public string FirstName{ get; set; }
[JsonProperty("lname")]
public string LastName{ get; set; }
[JsonProperty("subject")]
public string Subject { get; set; }
[JsonProperty("grade")]
public string Grade { get; set; }
}
[Serializable]
public class RootObject
{
public Student student { get; set; }
}