[英]Converting JSON string to C# object/array
我希望將以下數據轉換為ac#對象或數組,在其中可以顯示每個項目(最終將在列表視圖中顯示)。
json本身看起來像這樣:
[
{
"commonName": "uni_comp_4",
"processorID": "BFEFBDEB001201"
},
{
"commonName": "lib_comp_12",
"processorID": "BFEFBDEB004323"
}
]
我一直在這里尋求幫助,但是由於系統略有不同,我認為我可能不得不采取另一種方法。
我正在使用課程:
public class API_Response
{
public bool IsError { get; set; }
public string ErrorMessage { get; set;
public dynamic ResponseData { get; set; }
}
用於數據攜帶。 我的JSON“數據”如上所述,但是我在反序列化時遇到了問題。
最初,我嘗試過:
API_Response r = JsonConvert.DeserializeObject<API_Response>(response);
而且我可以使用MessageBox.show(r.ResponseData)看到JSON字符串。 本質上不會反序列化。
此外,我嘗試用相同的方法聲明以下內容:
public class RootObject
{
public string commonName { get; set; }
public string processorID { get; set; }
}
不能單獨(或完全)顯示此數據。
本質上,我試圖將類API_Response的“ ResponseData”放入對象中,但遇到了困難。
您不應該反序列化為RootObject[]
,而不是反序列化為API_Response
嗎? 另外,根據設置,您可能需要在Pascal大小寫中包含C#變量,即CommonName
和ProcessorID
您正在嘗試使用不包含JSON中提到的元素的類來反序列化對象。 嘗試放入List<RootObject>
因為您的JSON包含您已創建的RootObject
類的列表。 如果適合您,請嘗試以下解決方案。
JsonConvert.DeserializeObject<List<RootObject>>(response);
只是使用解碼器來解碼消息
Struct PCS: Decodable
{
let commonName : String?
let proccesorID : String?
}
var pcs = [PCS]()
把它放在viewdidload中
func parseData(){
let jsonUrlString = "Your_API_URL"
guard let url = URL(string: jsonUrlString) else { return }
URLSession.shared.dataTask(with: url) {(data, response, err) in
guard let data = data else { return }
do {
let decoder = JSONDecoder()
pcs = try decoder.decode([Course].self, from: data)
DispatchQueue.main.async {
self.tableView.reloadData()
}
} catch let jsonErr{
print("error", jsonErr)
}
}.resume()
在tableView中像這樣調用數據
pcs[indexPath.row].commonName
public class RootObject{
public string commonName { get; set; }
public string processorID { get; set; }
}
public class API_Response
{
public bool IsError { get; set; }
public string ErrorMessage { get; set; }
public RootObject[] ResponseData { get; set; }
}
API_Response r = JsonConvert.DeserializeObject<API_Response>(response);
然后,我可以使用這種格式來調用數據
MessageBox.Show("" + r.ResponseData[0].commonName);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.