[英]Nested deserialization of JSON in C#
我正在嘗試從我的 JSON 響應中檢索“數據”的內容。 我相信我已經正確地創建了這些類,但是我搞砸了 TechProfile class 的反序列化。 嘗試設置“techProfile”變量時出現異常。
Newtonsoft.Json.JsonReaderException:'解析值時遇到意外字符:P.路徑'',第 0 行,position 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 class 進行的第一次更改:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.