c# - C#中JSON的嵌套反序列化
问题描述
我正在尝试从我的 JSON 响应中检索“数据”的内容。我相信我已经正确地创建了这些类,但是我搞砸了 TechProfile 类的反序列化。尝试设置“techProfile”变量时出现异常。
Newtonsoft.Json.JsonReaderException:'解析值时遇到意外字符:P. 路径'',第 0 行,位置 0。
我不情愿地在 JSONMainResponse.Data 参数的末尾添加了一个 ToString(),因为没有它就无法编译。
我的 JSON:
{
"success":true,
"msg":"",
"data":[
{"categoryName":"Target platform","option_category_id":"1","skill_optionID":"1","option_type":"Scale","name":"Desktop apps","value":"2"},
{"categoryName":"Target platform","option_category_id":"1","skill_optionID":"2","option_type":"Scale","name":"Mobile apps","value":"2"},
{"categoryName":"Target platform","option_category_id":"1","skill_optionID":"3","option_type":"Scale","name":"Server apps","value":"5"},
{"categoryName":"Target platform","option_category_id":"1","skill_optionID":"4","option_type":"Scale","name":"Hardware dev","value":"2"},
{"categoryName":"Target platform","option_category_id":"1","skill_optionID":"5","option_type":"Scale","name":"Web dev","value":"0"}
]
}
主要代码:
string result = postData("http://test.com/test.php");
JSONMain JSONMainResponse = JsonConvert.DeserializeObject<JSONMain>(result);
string success = JSONMainResponse.Success;
string msg = JSONMainResponse.Msg;
TechProfile techProfile = JsonConvert.DeserializeObject<TechProfile>(JSONMainResponse.Data.ToString());
课程:
public partial class JSONMain
{
[JsonProperty("success")]
public string Success { get; set; }
[JsonProperty("msg")]
public string Msg { get; set; }
[JsonProperty("data")]
public TechProfile[] Data { get; set; }
}
public partial class TechProfile
{
[JsonProperty("categoryName")]
public string CategoryName { get; set; }
[JsonProperty("option_category_id")]
public string OptionCategoryId { get; set; }
[JsonProperty("skill_optionID")]
public string SkillOptionId { get; set; }
[JsonProperty("option_type")]
public string OptionType { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("value")]
public string Value { get; set; }
}
解决方案
我有点过分了。
对 JSONMain 类的第一个更改:
public List<TechProfile> Data { get; set; }
代替...
public TechProfile[] Data { get; set; }
然后对于主代码,我没有尝试再次反序列化,而是简单地声明了一个基于 JSONMainResponse.Data 的新 TechProfile 列表。见下文
string success = JSONMainResponse.Success;
string msg = JSONMainResponse.Msg;
List<TechProfile> data = JSONMainResponse.Data;
foreach(TechProfile tp in data)
{
string categoryName = tp.CategoryName;
}
推荐阅读
- ios - 如何使文本换行?
- facebook - firebase facebook 身份验证失败
- java - 使用字符串的 ArrayList 创建 javafx 图像
- powerbi - 如何使用 DAX 中的过滤器计算组平均值?
- laravel - 如何使用 heroku laravel 应用程序存储图像
- codeigniter - 如何在 CodeIgniter 中使用多个控制器?
- java - Java静态成员初始化
- jekyll - jekyll-seo-tag 在 Github 页面中不起作用
- python - 用 pandas 索引一个无限系列
- r - 使用 igraph 消除 clique 集群