我正在尝试反序列化从 LinkedIn Javascript API 获得的 Json 对象:
{"_key":"~","educations":{"_total":2,"values":[{"degree":"Bachelor of Science (BSc)","endDate":{"year":2004},
"fieldOfStudy":"Computer Software Engineering","id":134450447,"schoolName":"Bristol University","
startDate":{"year":2009}},{"id":143651018,"schoolName":"University of Kingston"}]},"emailAddress":
"test@test.com","firstName":"Robert","lastName":"Matthews"}
我编写了一个自定义类来存储这些值并使用 Json.NET 反序列化它们:
[Serializable]
public class LinkedInUserData {
[JsonProperty(PropertyName = "emailAddress")]
public string EmailAddress { get; set; }
// other properties cut out for simplicity
[JsonProperty(PropertyName = "educations")]
public Educations Educations { get; set; }
}
[Serializable]
public class Educations {
[JsonProperty(PropertyName = "_total")]
public string Total { get; set; }
[JsonProperty(PropertyName = "values")]
public Values Values { get; set; }
}
[Serializable]
public class Values { // cut down for simplicity
[JsonProperty(PropertyName = "degree")]
public string Degree { get; set; }
}
LinkedInUserData linkedData = JsonConvert.DeserializeObject<LinkedInUserData>(profile);
我能够毫无问题地转换单个对象(无数组等),但我卡在 Educations 中的 Values 对象上,并显示以下错误消息:
无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型“Data.Values”,因为该类型需要 JSON 对象(例如 {"name":"value"})才能正确反序列化。要修复此错误,请将 JSON 更改为 JSON 对象(例如 {"name":"value"})或将反序列化类型更改为数组或实现集合接口的类型(例如 ICollection、IList),例如可以从 JSON 数组反序列化。JsonArrayAttribute 也可以添加到类型中以强制它从 JSON 数组反序列化。路径“educations.values”,第 1 行,位置 47。
我尝试将 Educations 中的 Values 对象更改为字符串数组,但没有成功。有什么方法可以成功地将 Json 中的值反序列化到我的自定义类中,还是只能按照字符串数组的方式获得一些东西?
编辑- 列表(值)产品出现以下错误:
读取字符串时出错。意外标记:StartObject。路径 'educations.values[0].endDate',第 1 行,位置 96。
编辑 2 - 好的,我现在明白了,(值的)列表确实有效,然后它在 StartDate 和 EndDate 上跳闸,因为它们本身就是对象,我将它们都设置为strings
. 我一直在努力理解Json
字符串,但Link2CSharp
帮助我解决了它。