【问题标题】:How to parse JSON response from API in Xamarin如何在 Xamarin 中解析来自 API 的 JSON 响应
【发布时间】:2020-12-31 12:45:21
【问题描述】:

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

JSON 请求:

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

"JsonReq": {

    "JHeader": {
        "key": "value",
        "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\", \"listItem\", \"ListItem\"],
        \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\", \"ListItem\"]
]}

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

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

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

【问题讨论】:

  • 那不是有效的 json。不要发布“类似这样的东西”,请发布您收到的实际回复或代表性样本。您是否尝试过通过与请求相同的 json2csharp 工具运行响应?
  • @Jason 是的,这不是有效的 JSON。但我可以通过删除 \r \t 和 \.然后它变成一个有效的 JSON。是的,我在修复它之后运行了来自 json2csharp 的响应,它生成了 c-sharp 代码。但接下来会发生什么。现在我的项目将有两个模型类;一个用于请求,一个用于响应,它们都将具有 JHeader 和 JMetada 类。如何在一个命名空间中有两个同名的类?

标签: json xamarin httprequest httpresponse


【解决方案1】:

为您的响应生成一个模型,像这样

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);

【讨论】:

  • 是的,我已经尝试过了。但是我已经在请求模型中有这些类。我可以在一个命名空间中有两个同名的类吗?加上 JData 是请求中的类和响应中的列表。
  • 我想我明白了。我在想也许我无法更改类名,因为它们被用来生成 json。只是认为情况并非如此,我只需要保持变量名与请求和响应中的相同,而不是类名。谢谢:)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 2017-06-14
    • 1970-01-01
    • 2017-09-14
    相关资源
    最近更新 更多