繁体   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