【问题标题】:Deal with multiple response and null values处理多个响应和空值
【发布时间】:2012-04-23 16:23:37
【问题描述】:

我实际上是在尝试将来自我的 PHP Web 服务的 JSON 请求响应解析为一个 c# 对象。

我找到了一些使用 json.net 的代码示例,然后我从我的 Wine 类中制作了这段代码:

public Wine(string json)
    {
        JObject jObject = JObject.Parse(json);
        BottleName = (string)jObject["name"];
        Category = (string)jObject["category"];
        Prize50 = Double.Parse((string)jObject["prize_50"]);
        Prize75 = Double.Parse((string)jObject["prize_75"]);
        Prize150 = Double.Parse((string)jObject["prize_150"]);
        Prize300 = Double.Parse((string)jObject["prize_300"]);
    }

如果一个只有 1 个响应,就像

"{\"id\":\"2\",\"name\":\"Pinot noir\",\"loc_wine\":\"",\"category\":\"Red\",\"prize_50\":\"12.800000\",\"prize_75\":\"16.500000\",\"prize_150\":\"0.000000\",\"prize_300\":\"0.000000\"} "

但是当我的 json 响应中有另一个 Json 字符串时我遇到了麻烦,我希望知道如何处理它?

而且我有时有空字段,我该如何忽略它们?

感谢您的帮助! :-)

附:如果需要,这就是我从 PHP 文件发送数据的方式:

      $req = "SELECT * 
      FROM  t_wine
      WHERE name= \"Pinot noir\""; // for test purpose


      $res = mysqli_query($connection, $req);
      while($data= mysqli_fetch_assoc($res)) {
          extract ($data);
          echo json_encode($data);

      }

【问题讨论】:

  • “当我的 json 响应中有另一个 Json 字符串并且我希望知道如何处理它时”是什么意思?你的意思是你的 json 包含多个Wine 的实例,还是你的意思是在同一个字符串中有第二个不同的类?
  • 我的意思是我还有另一个 Wine 实例

标签: c# web-services c#-4.0 json.net


【解决方案1】:

如果mysqli_fetch 语句返回多行,则回显每一行的 json 响应而不将响应放入数组中会给您错误的 JSON。你的反应基本上是这样的:

{..some data...}{...some data...}

所以让我们利用 JSON 的数组结构。将您的 PHP 代码更改为像数组一样输出

$res = mysqli_query($connection, $req);
echo "[";
while($data= mysqli_fetch_assoc($res)) {
    extract ($data);
    echo json_encode($data);
    echo ",";
}
echo "]";

这会给你这样的东西:

[{...some data...},{...some data...},]

请记住,这很粗糙。您需要修剪结束括号之前的最后一个逗号。但这是一个有效的 JSON 数组。

您还需要修改 C# 以将 jObject 处理为对象数组而不是一个对象。

【讨论】:

  • 我会试试你们俩在这里写的,我觉得这正是我需要的谢谢!
【解决方案2】:

好的,如果您尝试处理获取Wine 的多个实例,并且您想忽略 json.net 中的空值,您可以这样做:

var settings = new JsonSerializerSettings{ NullValueHandling = NullValueHandling.Ignore };
                                                                               }
JsonConvert.DeserializeObject<IEnumerable<Wine>>(response.ToString(), settings);

【讨论】:

    猜你喜欢
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多