我在 JSON 方面幾乎沒有經驗,而且我遇到了一個問題。任何幫助表示贊賞。
我想專門訪問 附加資訊陣列中的名稱值。
JSON回應:
{
"statusCode": 200,
"version": 1,
"jsonData": [
{
"additionalInformation": [
{
"id": "XXX94XXXX9xxXx_xxxXXXX",
"name": "xxxx xxx x xxxxxxxx"
},
{
"id": "0xXXxcXxv5PQqT$6i2zLgV",
"name": "xxx xxxxxxxx"
},
{
"id": "11Krt_our2rPCPqJ_2fKZR",
"name": "xxx xxxxxxxx xx"
},
{
"id": "2jYw4IyBP8KuozM_ej7DGf",
"name": "xxxxxxx 1"
},
{
"id": "3B8O805wL1ufabHMz1Je3v",
"name": "xxxxxxx 2"
},
{
"id": "0FVKUYZkvFaxd_OQUiyPBZ",
"name": "xxxxxxx"
},
{
"id": "3O41QFd0573QQvFco5zUUP",
"name": "Xxxxxxxxx"
}
],
"type": 0
}
],
"errorMessages": [],
"warningMessages": [],
"informationMessages": []
}
模型:
public class CFunctions
{
public int statusCode { get; set; }
public int version { get; set; }
public List<PFunctions>[] jsonData { get; set; }
public List<string> errorMessages { get; set; }
public List<string> warningMessages { get; set; }
public List<string> informationMessages { get; set; }
/*public CFunctions()
{
jsonData = new List<PFunctions>();
}*/
}
[Serializable]
public class PFunctions
{
public List<PAdditionalInfo>[] additionalInformation { get; set; }
public int type { get; set; }
/*public PFunctions()
{
additionalInformation = new List<PAdditionalInfo>();
}*/
}
[Serializable]
public class PAdditionalInfo
{
public Guid id { get; set; }
public string name { get; set; }
}
反序列化
var request = UnityWebRequest.Get(baseurl);
var operation = request.SendWebRequest();
var jsonResponse = request.downloadHandler.text;
List<CFunctions>[] PFunctionsList = JsonConvert.DeserializeObject<List<CFunctions>[]>(jsonResponse);
錯誤:
無法將當前 JSON 物件反序列化為型別“System.Collections.Generic.List`1[CFunctions][]”,因為該型別需要 JSON 陣列才能正確反序列化。
要修復此錯誤,請將 JSON 更改為 JSON 陣列或更改反序列化型別,使其成為可以從 JSON 物件反序列化的普通 .NET 型別。
JsonObjectAttribute 也可以添加到型別中以強制它從 JSON 物件反序列化。路徑“statusCode”,第 1 行,位置 14。 UnityEngine.Debug:Log(Object)
我試過的
即使我改變了錯誤仍然存??在List<PAdditionalInfo> to List<PAdditionalInfo>[]
我不確定如何使用JsonObjectAttribute以及是否是最好的方法。
uj5u.com熱心網友回復:
您已經在模型中宣告了一個陣列List<T>,例如List<PAdditionalInfo>[]. json 表示單個陣列,而不是嵌套的。您可以通過選擇一個或另一個來解決這個問題(我決定使用List<>,但陣列也是有效的):
public class PFunctions
{
public List<PAdditionalInfo> additionalInformation { get; set; } // removed []
...
}
public class CFunctions
{
public int statusCode { get; set; }
public int version { get; set; }
public List<PFunctions> jsonData { get; set; } // removed []
...
}
您要反序列化的類不正確。反序列化為正確的型別(CFunctions不是List<CFunctions>[]):
CFunctions cFunctions = JsonConvert.DeserializeObject<CFunctions>(json);
uj5u.com熱心網友回復:
獲取附加資訊的最有效方法是這一行代碼,您只需要一個類
List<AdditionalInformation> additionalInformation = JObject.Parse(json)
["jsonData"][0]["additionalInformation"].ToObject<List<AdditionalInformation>>();
班級
public class AdditionalInformation
{
public string id { get; set; }
public string name { get; set; }
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/426802.html
