我实际上是在尝试将来自我的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);
}
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 处理为对象数组,而不是一个对象。
,如果您尝试处理获取Wine
的多个实例,并且想要忽略 json.net 中的空值,则可以这样做:
var settings = new JsonSerializerSettings{ NullValueHandling = NullValueHandling.Ignore };
}
JsonConvert.DeserializeObject<IEnumerable<Wine>>(response.ToString(), settings);