簡體   English   中英

將JSON字符串轉換為C#對象/數組

[英]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#變量,即CommonNameProcessorID

您正在嘗試使用不包含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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM