我实际上是在尝试将我的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"]);
}
如果只有一个像
这样的响应,那就完美了"{\"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字符串时,我会遇到麻烦,我希望知道如何处理它?</ p>
我有时会有空字段,我怎么能忽略它们呢?
感谢您的帮助! : - )
P.S。如果需要,这就是我从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);
}
答案 0 :(得分:2)
如果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作为对象数组而不是一个对象进行处理。
答案 1 :(得分:0)
好的,如果您尝试处理获取Wine
的多个实例,并且想要忽略json.net中的空值,则可以执行以下操作:
var settings = new JsonSerializerSettings{ NullValueHandling = NullValueHandling.Ignore };
}
JsonConvert.DeserializeObject<IEnumerable<Wine>>(response.ToString(), settings);