如何在 Xamarin 中解析来自 API 的 JSON 响应

问题描述

我对 Xamarin 还很陌生,正在做我的第一个项目。我有一个问题,我需要登录用户并从响应中检索详细信息。这是我的 JSON 请求

JSON 请求:

'{
"key": "value","key": "value","JsonReq": {

    "JHeader": {
        "key": "value","key": "value"
    },"JMetaData": {},"JData": {
        "key": "value","key": "value"
    }
},"key": "value"}'

请求 JSON 用单引号括起来。

我在 Xamarin 中编写了一个模型类(使用在线 JSON 到 C-sharp 工具),我可以成功地向 API 发送 POST 请求并获得正确的响应。 JSON 响应如下所示:

JSON 响应:

{
\"JHeader\": {
    \"key\": IntegerValue,\"key\": \"value\"
},\r \"JMetaData\": {

    \"headings\": [
        [\"list1\",\"listItem\",\"ListItem\"],[\"list2\",\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[\"list3\",\t\t\t\t\t \"listItem\",\t\t\t \"ListItem\"]
    ]
},\r \"JData\": [
    \r [\"listItem\",\"ListItem\"]
]}

响应 JSON 没有用单引号括起来。 但是有这些 \r \t 和 \

现在我想解析这个响应并从中提取值。但是由于请求和响应之间存在一些差异,我无法对两者使用相同的模型类。例如,响应中没有“JSonReq”,但请求中有一个。 “JMetaData”是响应中的 list 类型,但在请求中具有键值对。

任何想法如何解析此响应?

解决方法

为你的回复生成一个模型,就像这样

public class JHeader    {
    public string key { get; set; } 
}

public class JMetaData    {
    public List<List<string>> Headings { get; set; } 
}

public class Root    {
    public JHeader JHeader { get; set; } 
    public JMetaData JMetaData { get; set; } 
    public List<List<string>> JData { get; set; } 
}

然后使用 Newtonsoft

解析它
var data = JsonConvert.DeserializeObject<Root>(json);
,

我想我明白了。我在想也许我无法更改类名,因为它们被用来生成 json。只是认为情况并非如此,我只需要保持与请求和响应中的变量名相同,而不是类名。傻我。